Просмотр логов

AdmBookmark_Log_ В системе Ultima Businessware® реализовано центральное структурированное журналирование на базе библиотеки Serilog (link http://serilog.net/):

встроенный в систему анализатор логов "Log viewer", описанный ниже, работает только с базой данных MongoDB и подразумевает конкретную структуру документов-событий, генерируемую библиотекой Serilog;

запуск и настройка MongoDB описаны в разделе Аппаратный комплекс;

настройки приложений для журналирования с использованием Serilog описана там же;

по умолчанию системой журналируются:

все SQL-запросы, для них в лог пишутся: время, текст, параметры, транзакция и серверный вызов;

все исключения на момент возникновения – FirstChanceException. Необходимость этого обусловлена тем, что сервер приложений не всегда действует от имени клиента. В заданиях, обратных вызовах и явно созданных потоках может возникнуть исключение, которое приведет к прекращению работы сервера и не будет транслировано клиенту. Чтобы эта информация не потерялась и необходимо журналирование всех исключений;

любой оператор throw. По этой причине в логе можно увидеть даже исключения, которые чем-то перехватываются и не видны конечному пользователю;

журналирование остальных событий должно быть инициализировано прикладным разработчиком. Это делается через интерфейсы ILogger и ILogManager, описанные в документации разработчика в разделе "Инструментарий разработчика / Скрипты / Специальные менеджеры".

Командой "View logs" открывается форма просмотра событий "Log viewer":

LogViewer

bookmark При первом запуске на закладке "Settings" в левой части формы необходимо выполнить настройки для подключения к базе MongoDB:

Mongo DB connection string – адрес базы в формате: mongodb://127.0.0.1:27017;

User name и Password – для каждого пользователя в MongoDB создается своя учетная запись с правами на чтение логов;

Limit loaded entries to – ограничение на количество отображаемых в форме событий;

Timeout – период ожидания в секундах отклика от базы.

LogViewer2

bookmark На закладке "Filter" осуществляется фильтрация отображаемых в форме событий.

При журналировании к событиям автоматически добавляются свойства контекста выполнения, как-то: код пользователя, идентификатор транзакции, текущего вызова и сессии. По коду сессии удобно отслеживать все события, которые произвел в системе некий конкретный пользователь в заданный промежуток времени. По идентификатору вызова можно выяснить, какие SQL-запросы были выполнены в течение некоего серверного вызова, и так далее.

bookmark На закладке "Query" приведен запрос на JSON к базе Mongo, который генерируется согласно настройкам фильтра за закладке "Filter". При необходимости можно писать произвольные запросы к хранилищу, изменив данный запрос вручную.

Запросы в Mongo формулируются в виде документов-образцов. В образце указываются либо значения интересующих полей (например, Level: Debug), либо специальные операторы сравнения ($in, $gt, $gte, $lt, $lte, $regex и так далее). Чтобы ограничить значения вложенного документа (скажем, Properties.UserID), используется точечная нотация. Более подробно тема освещена в документации к MongoDB.

bookmark Отфильтрованный список событий выводится в правой части формы. События отсортированы по убыванию даты. Список уже выведенных событий можно дополнительно фильтровать, в том числе и с использованием регулярных выражений (подробное описание синтаксиса которых можно найти на сайте MSDN link eng/rus), в строке поиска LogViewer4 в верхней части формы. Данный фильтр применяется нажатием кнопки "Dictionaries_Button_5 Refresh":

LogViewer3

События каждого уровня важности Logging level предваряются в списке соответствующей иконкой:

LogLevelVerbose – уровень Verbose;

LogLevelDebug – уровень Debug;

LogLevelInformation – уровень Information;

LogLevelWarning – уровень Warning;

LogLevelError – уровень Error;

LogLevelFatal – уровень Fatal.

Справа в секции "Logging" отображаются свойства выбранного в списке события, которые могут иметь сложную древовидную структуру: исключения сохраняются вместе со вложенными исключениями и набором свойств Data. Снизу – подробная информация о выбранном в списке событии:

на закладке "Rendered message" – текстовое описание события;

на закладке "Exception call stack" – стек вызовов исключения;

на закладке "Json document" – JSON-представление события.