Протоколирование событий
-
При остановке сервиса dvwebclient в файл журнала Web-клиента добавляется запись о завершении Web-клиента, например:
[2022-10-26 17:38:08.1840][Error][DocsVision.Platform.WebClient.Diagnostics.Trace.TraceError] Application end: HostingEnvironment
-
При старте сервиса dvwebclient создаётся новый файл журнала Web-клиента.
-
К названию файла журнала добавляется ID процесса и дата запуска Web-клиента:
WebClient${event-properties:item=Tenant} PID $\{processId} $\{shortdate}.log
Например:
WebClient PID 4592 2022-10-26.log
-
В созданный файл добавляется сообщение о старте Web-клиента, например:
[2022-10-26 17:11:56.8774][Error][DocsVision.Platform.WebClient.Diagnostics.Trace.TraceError] Application start
Протоколирование запросов сервера Web-клиента
Протоколирование запросов полезно для анализа входящих запросов сервера Web-клиента и ответов на них, заголовков и т.д.
-
HTTP запросы и ответы.
-
Дата и время запросов и ответов.
-
Заголовки
Протоколирование запросов сервера Web-клиента настраивается в конфигурационном файле модуля по адресу /usr/lib/docsvision/webclient/appsettings.json
, за настройку отвечает параметр W3CLogging
:
"W3CLogging": {
"IsEnabled": true, (1)
"LogDirectory": "/var/log/docsvision/webclient/", (2)
"LoggingFields": "Date,Time,ServerName,Method,UriStem,UriQuery,ProtocolStatus,TimeTaken,ProtocolVersion,Host,UserAgent,Referer,ConnectionInfoFields", (3)
"FileSizeLimit": 10485760, (4)
"RetainedFileCountLimit": 4, (5)
"FileName": "webclient-w3c-" (6)
}
1 | Включение/отключение протоколирования событий. Значение по умолчанию: false , в стандартной конфигурации остальные настройки отсутствуют. |
2 | Путь к журналу. |
3 | Журналируемые поля. По умолчанию указываются запросы, ответы, заголовки, дата/время (записывается в формате UTC) и имя сервера. Со всеми допустимыми значениями можно ознакомиться в документации Microsoft. |
4 | Максимальный размер файла журнала, после которого будет создаваться новый. Значение в байтах, по умолчанию 10485760 байт (10 Мб). Цифра 0 означает отсутствие ограничения по размеру. |
5 | Количество сохраняемых файлов журнала. Допустимые значения от 1 до 10000 , по умолчанию используется 4 . |
6 | Префикс имени файла журнала. |
Запросы будут записаны в файл /var/log/docsvision/webclient/webclient-w3c-{YYYYMMDD.X}.txt
. Настройка альтернативного расширения поддерживается только при протоколировании с NLog, см. подробнее ниже.
Протоколирование запросов с помощью NLog
Если требуется отображать в журналах локальное время или расширить список журналируемой информации, есть возможность подключения Nlog. При этом стандартное журналирование "W3CLogging" будет отключено (вне независимости от значения параметра
.Протоколирование запросов с использованием NLog имеет ряд преимуществ перед журналированием W3CLogging. NLog предлагает больше параметров логирования (38 против 17),указывает в журнале местное время с точностью до миллисекунды, позволяет задать свои форматы для отображаемых данных и даёт гибкость в управлении файлами журнала.
"NLog": {
"extensions": [
{ "assembly": "DocsVision.WebClient" } (1)
],
"targets": {
"w3cFile": {
"type": "File",
"fileName": "${gdc:baseLogFolder}/docsvision/webclient/webclient-w3c-${date:format=yyyyMMdd}.${processId}.log",
"layout": {
"type": "W3CLoggingLayout",
"columns": [ (2)
{ "column": "date" },
{ "column": "time", "layout": "${longdate}" }, (3)
{ "column": "c-ip" },
]
}
}
},
"rules": [
{
"logger": "*",
"minLevel": "Debug",
"writeTo": "w3cFile"
}
]
}
1 | Обязательный параметр, если он не указан, NLog не будет записывать обычные сообщения в журнал. |
2 | Секция задаёт собственный набор колонок. Если список колонок не указан, в журнал будут включены только колонки по умолчанию date , time , c-ip , s-ip , cs-username , s-computername , cs-method , cs-uri-stem , cs-uri-query , sc-statuscode , sc-bytes , cs-bytes , time-taken , cs-host , cs(User-Agent) . |
3 | Формат представления данных колонки может быть изменён. Если формат не указан, будут использоваться значения по умолчанию. В layout можно использовать любые переменные NLog, подробнее см. в документации NLog. |
Полный список колонок и допустимых значений для журналирования:
-
date
— Дата начала обработки запроса. Значение по умолчанию:${date:format=yyyy-MM-dd}
. -
time
— Время начала обработки запроса. Значение по умолчанию:${date:format=HH:mm:ss.fff}
. -
webclient-version
— Версия Web-клиента. Например6.1.725+a4c9b271d7
. Значение по умолчанию:${webclient-version}
. Для протоколирования запросов сервера приложений аналогичная колонка называетсяappserver-version
. -
c-ip
— IP-адрес клиента. Значение по умолчанию:${aspnet-request-ip}
. -
cs(Auth-Type)
— Тип используемой аутентификации (например, Cookie). Значение по умолчанию:${aspnet-user-authtype}
. -
cs(Certificate)
— Сертификат клиента текущего запроса. Значение по умолчанию:${aspnet-request-client-certificate}
. -
cs(Content-Type)
— Тип контента:text/html
,multipart/form-data
и т.д.. Значение по умолчанию:${aspnet-request-contenttype}
. -
cs(Cookie)
— Cookie, подробнее о допустимых параметрах в документации NLog. Значение по умолчанию:${aspnet-request-cookie}
. -
cs(Referer)
— Значение поляReferer
из заголовка запроса. Значение по умолчанию:${aspnet-request-referrer}
. -
cs(User-Agent)
— User agent. Значение по умолчанию:${aspnet-request-useragent}
. -
cs-bytes
— Получено байтов. Значение по умолчанию:${aspnet-request-contentlength}
. -
cs-connectionid
— Идентификатор соединения, см. в документации Microsoft. Значение по умолчанию:${aspnet-request-connection-id}
. -
cs-form
— Данные формы из запроса. Подробнее о параметрах в документации NLog. Значение по умолчанию:${aspnet-request-form}
. -
cs-headers
— Заголовок запроса. Если нужно взять только определенные заголовки, можно воспользоваться параметрами, подробнее см. в документации NLog. Значение по умолчанию:${aspnet-request-headers}
. -
cs-host
— ЗначениеHost
из заголовка запроса. Значение по умолчанию:${aspnet-request-url:includeScheme=false:includeHost=true:includePath=false}
. -
cs-fullhostname
— Полное имя хоста (с портом). Значение по умолчанию:${aspnet-request-host}
. -
cs-isauthenticated
— Состояние аутентификации (значения0
или1
). Значение по умолчанию:${aspnet-user-isAuthenticated}
. -
cs-method
— Метод (get
/post
и т.п.). Значение по умолчанию:${aspnet-request-method}
. -
cs-mvc-action
— Вызываемое действие. Значение по умолчанию:${aspnet-mvc-action}
. -
cs-mvc-controller
— Вызываемый контроллер. Значение по умолчанию:${aspnet-mvc-controller}
. -
cs-posted-body
— Значение по умолчанию${aspnet-request-posted-body}
.Значения:-
1
, если:-
Это запрос HTTP/1.x с ненулевым значением Content-Length или заголовком "Transfer-Encoding: chunked".
-
Это запрос HTTP/2, который не установил флаг END_STREAM на исходном фрейме заголовка.
-
-
0
, если:-
Это запрос HTTP/1.x без заголовка Content-Length или "Transfer-Encoding: chunked", или Content-Length равен 0.
-
Это запрос HTTP/1.x с Connection: Upgrade (например, WebSockets). Для этих запросов не существует тела HTTP-запроса, и никакие данные не должны быть получены до тех пор, пока не будет выполнено обновление.
-
Это запрос HTTP/2, который устанавливает END_STREAM на начальном фрейме заголовка.
-
-
-
cs-tracking-consent
— Согласие на отслеживание (значения0
или1
). Значение по умолчанию:${aspnet-request-tracking-consent}
.Возможные параметры:-
property
.Допустимые значения:-
CanTrack
— Указывает, было ли дано согласие, или если согласие не требуется (1 или 0); -
HasConsent
— было ли дано согласие; -
IsConsentNeeded
— требуется ли согласие для данного запроса.
-
Пример вызова в собственном формате:
${aspnet-request-tracking-consent:property=CanTrack}
. -
-
cs-uri-query
— Значение по умолчанию:${aspnet-request-url:includeScheme=false:includeHost=false:includePath=false:includeQueryString=true}
. Запрос URI. -
cs-uri-stem
— Ресурс URI. Значение по умолчанию:${aspnet-request-url:includeScheme=false:includeHost=false}
. -
cs-username
— Имя пользователя. Значение по умолчанию:${aspnet-user-identity}
. -
is-websocket
— Является ли запрос запросом на установку WebSocket (0
или1
). Значение по умолчанию:${aspnet-request-is-web-socket}
. -
s-basepath
— ЗначениеContentRootPath
. Значение по умолчанию:${aspnet-appbasepath}
. -
s-computername
--Имя сервера. Значение по умолчанию:${machinename}
. -
s-environment
— ЗначениеASPNETCORE_ENVIRONMENT
. Значение по умолчанию:${aspnet-environment}
. -
s-ip
— IP-адрес сервера. Значение по умолчанию:${aspnet-request-local-ip}
. -
s-port
— Порт. Значение по умолчанию:${aspnet-request-local-port}
. -
s-sitename
— Имя сайта. Значение по умолчанию:${iis-site-name}
. -
s-webrootpath
—WebRootPath
. Значение по умолчанию:${aspnet-webrootpath}
. -
sc(Content-Type)
— Тип контента ответа. Значение по умолчанию:${aspnet-response-contenttype}
. -
sc-bytes
— Отправлено байт. Значение по умолчанию:${aspnet-response-contentlength}
. -
sc-response-has-started
— Были ли отправлены заголовки ответа, т.е. начался ли уже ответ или нет. Значения0
или1
. Значение по умолчанию:${aspnet-response-has-started}
. -
sc-status
— Код статуса ответа (200
,404
и т.д.). Значение по умолчанию:${aspnet-response-statuscode}
. -
time-taken
— Сколько времени заняла обработка запроса (в миллисекундах). Значение по умолчанию:${aspnet-request-duration}
.