Настройка журналирования
События Web-клиента протоколируются с помощью компонента NLog (http://nlog-project.org).
Для каждой используемой БД в режиме мультитенантности ведётся свой журнал, например: WebClient_DataBaseName_ГГГГ-ММ-ДД.
|
| Если параметры отсутствуют в конфигурационном файле, создайте их самостоятельно. |
Расширенные настройки журналирования осуществляются в конфигурационном файле Web-клиента.
-
Откройте конфигурационный файл
/usr/lib/docsvision/webclient/appsettings.json. -
Измените параметры журналирования в параметрах
targetsиrules.{ "NLog": { "throwConfigExceptions": false, "extensions": [ { "assembly": "NLog.Extensions.Logging" }, { "assembly": "NLog.Web.AspNetCore" } ], "targets": { "async": true, "logFile": { "type": "File", "fileName": "${basedir}/../Logs/WebClient${event-properties:item=Tenant} PID ${processId} ${shortdate}.log", (1) "layout": "[${longdate}][${level}][${callsite}] ${message} ${onexception:${newline}${exception:maxInnerExceptionLevel=10:format=shortType,message,stacktrace:separator=*:innerExceptionSeparator=
	}}" }, "logConsole": { "type": "Console" } }, "rules": [ (2) { "logger": "Microsoft.*", "maxLevel": "Info", "final": true }, { "logger": "*", "minLevel": "Error", "writeTo": "logFile" (3) }, { "logger": "*", "minLevel": "Trace", "writeTo": "logConsole" (4) } ] } }1 Измените значение параметра fileName, чтобы настроить путь для сохранения журнала работы:
ВfileNameможно использовать допустимые для NLog переменные, например:\Logs\${level}\WebClient_${shortdate}.log.2 Измените значение параметров minLevelиmaxLevel, например, наtrace, чтобы включить протоколирование всех типов событий.
Допустимые уровни протоколирования приведены на странице NLog в GitHub.
Для получения дополнительной информации о других настройках NLog обратитесь к документации по данной платформе.3 Настройки журнала Web-клиента. 4 Настройки журнала Панель управления Web-клиентом. -
Сохраните изменения конфигурационного файла.
Уровень журналирования может быть изменён методом
/Log/SetLogLevel, если пользователь, который вызывает метод, состоит в группе DocsVision Administrators. Методом можно задать следующие уровни: Trace = 0, Debug = 1, Info = 2, Warn = 3, Error = 4 (любое другое значение будет распознано как Error). Передать уровень журналирования можно, например, при помощи GET-параметраminLevel:Log/SetLogLevel?minLevel=0
После перезапуска dvwebclient уровень журналирования будет возвращён в исходное состояние в соответствии с конфигурационным файлом.
Расширенное журналирование
Web-клиент поддерживает расширенное журналирование параметров производительности. Сюда входит точное логирование времени выполнения запросов Web-клиента, время выполнения запросов к dvappserver с привязкой к запросу Web-клиента.
Для настройки доступно три фильтра журнала: По пользователю, По конкретному адресу, По времени запроса.
После включения диагностического логирования можно делать запросы. Если в параметре будет слеш (\ или /), его необходимо переводить в URL код. Иными словами, заменять example\usr01 на example%5Cusr01.
-
Какие запросы к dvappserver выполнялись.
-
Время, потраченное на выполнение каждого из них.
-
Время, проведённое запросами на стороне dvappserver и на стороне Web-клиента.
-
Параметры запросов.
-
Устанавливать причины аномально быстрого или медленного выполнения запроса Web-клиента.
-
Выявлять ошибки и неоптимальные места в работе Web-клиента и Object Manager.
-
Обнаруживать блокировки Web-клиента и Object Manager.
-
Выявлять проблемные запросы на сервере.
Чтобы включить диагностическое логирование, нужно в конфигурационном файле Web-клиента для параметра EnableDiagnosticsLogger в разделе указать значение 1:
{
"Docsvision": {
"WebClient": {
"SettingGroups": {
"System": {
"EnableDiagnosticsLogger": "1" (1)
}
}
}
}
}
| 1 | Включить расширенное журналирование. |
Настроить параметры журналирования можно в конфигурационном файле следующим образом:
{
"targets": {
"async": true,
"logFile": {
"type": "File",
"fileName": "${gdc:baseLogFolder}/docsvision/webclient/webclient.log",
"layout": "[${longdate}][${level}][${callsite}] ${message} ${onexception:${newline}${exception:maxInnerExceptionLevel=10:format=shortType,message,stacktrace:separator=*:innerExceptionSeparator=
	}}"
},
"logConsole": {
"type": "Console"
},
"diagnosticsLogWebClient": {
"type": "File",
"fileName": "${gdc:baseLogFolder}/docsvision/webclient/DiagnosticsLogWebClient${event-properties:item=Tenant} PID ${processId} ${shortdate}.tsv" (1)
},
"diagnosticLogStorageServer": {
"type": "File",
"fileName": "${gdc:baseLogFolder}/docsvision/webclient/DiagnosticLogStorageServer${event-properties:item=Tenant} PID ${processId} ${shortdate}.tsv" (2)
}
},
"rules": [ (3)
{
"logger": "DiagnosticsLogWebClient",
"minLevel": "Trace",
"writeTo": "diagnosticsLogWebClient"
},
{
"logger": "DiagnosticLogStorageServer",
"minLevel": "Trace",
"writeTo": "diagnosticLogStorageServer"
},
]
}
| 1 | Адрес хранения журнала Web-клиента. В параметре важно добавить в имя файла ${processId}, например, WebCDiagnostics PID${processId}.log, а также указать layout="${message}". |
| 2 | Адрес хранения журнала dvappserver. В параметре важно добавить в имя файла ${processId}, например, WebCDiagnostics PID${processId}.log, а также указать layout="${message}". |
| 3 | Обязательные разделы для работы расширенного журналирования. |
Журнал ведётся в формате .tsv и в дальнейшем может быть проанализирован через приложение для работы с журналами, например Log Parser Studio. Расширенный журнал по умолчанию сохраняется в стандартный каталог журналов Web-клиента, но при помощи параметров конфигурации NLog можно записать в иной каталог.
Чтобы включить ведение расширенного журнала с требуемым фильтром, нужно выполнить в браузере запрос. Примеры запросов приведены далее.
Примеры запросов
-
Запрос включения журнала для всех пользователей:
http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogUser?user=*
Журналируются все запросы
example\usr01:http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogUser?user=example%5Cusr01
-
Запрос включения журнала по адресу:
http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogAddress?address=Grid%2FGetGridDataEx
Журналируются все запросы, в имени которых содержится подстрока
Grid/GetGridDataEx. При необходимости можно журналировать все запросы конкретного контроллера:http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogAddress?address=Grid http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogAddress?address=*
-
Запрос включения журнала по времени выполнения запросов:
http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogRequestTime?milliseconds=500
-
Запрос установки таймера журналирования с указанием времени работы 10 минут:
http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/SetIntervalTimer?minutes=10
Принцип работы запроса :
Вызов запроса
SetIntervalTimerне включает журналирование. Для журналирования должен быть указан конкретный фильтр (AddLogUser,AddLogAddressилиAddLogRequestTime), который будет вызван до или после запросаSetIntervalTimer. ЗапросSetIntervalTimerможет быть выполнен в любой момент до или после установки фильтров. При его выполнении таймер перезапускается. Т.е. если нужно продлить время журналирования, достаточно выполнить этот запрос ещё раз.Указание таймера в параметре
SetIntervalTimerне является обязательным, в таком случае журналирование всех запросов по умолчанию будет длиться 1 час. Даже после сброса с помощьюResetзапроса. Пользовательское значение таймера сбрасывается на значение по умолчанию после перезапуска dvwebclient (т.е. значение времени таймера хранится в кэше Web-клиента).Время работы таймера отсчитывается с момента последнего запроса к API журналирования.
-
Фильтры можно комбинировать. Ниже приведён пример включения фильтра для пользователя
example\usr01, адресаGrid/GetGridDataEx, времени выполнения запросов50мс:http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogUser?user=example%5Cusr01 http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogAddress?address=Grid%2FGetGridDataEx http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogRequestTime?milliseconds=50
-
Чтобы отключить ведение расширенного журнала, нужно выполнить запрос в браузере:
http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/Reset