Настройка журналирования

События Web-клиента протоколируются с помощью компонента NLog (http://nlog-project.org).

Для каждой используемой БД в режиме мультитенантности ведётся свой журнал, например: WebClient_DataBaseName_ГГГГ-ММ-ДД.
Если параметры отсутствуют в конфигурационном файле, создайте их самостоятельно.

Расширенные настройки журналирования осуществляются в конфигурационном файле Web-клиента.

  1. Откройте конфигурационный файл /usr/lib/docsvision/webclient/appsettings.json.

  2. Измените параметры журналирования в параметрах 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-клиентом.
  3. Сохраните изменения конфигурационного файла.

    Уровень журналирования может быть изменён методом /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.

Для отдельного запроса Web-клиента можно посмотреть:
  • Какие запросы к dvappserver выполнялись.

  • Время, потраченное на выполнение каждого из них.

  • Время, проведённое запросами на стороне dvappserver и на стороне Web-клиента.

  • Параметры запросов.

Эта информация позволяет:
  • Устанавливать причины аномально быстрого или медленного выполнения запроса Web-клиента.

  • Выявлять ошибки и неоптимальные места в работе Web-клиента и Object Manager.

  • Обнаруживать блокировки Web-клиента и Object Manager.

  • Выявлять проблемные запросы на сервере.

Чтобы включить диагностическое логирование, нужно в конфигурационном файле Web-клиента для параметра EnableDiagnosticsLogger в разделе "Docsvision"  "WebClient" > "SettingGroups"  "System" указать значение 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 можно записать в иной каталог.

Чтобы включить ведение расширенного журнала с требуемым фильтром, нужно выполнить в браузере запрос. Примеры запросов приведены далее.

Примеры запросов

  1. Запрос включения журнала для всех пользователей:

    http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogUser?user=*

    Журналируются все запросы example\usr01:

    http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogUser?user=example%5Cusr01
  2. Запрос включения журнала по адресу:

    http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogAddress?address=Grid%2FGetGridDataEx

    Журналируются все запросы, в имени которых содержится подстрока Grid/GetGridDataEx. При необходимости можно журналировать все запросы конкретного контроллера:

    http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogAddress?address=Grid
    http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogAddress?address=*
  3. Запрос включения журнала по времени выполнения запросов:

    http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/AddLogRequestTime?milliseconds=500
  4. Запрос установки таймера журналирования с указанием времени работы 10 минут:

    http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/SetIntervalTimer?minutes=10
    Принцип работы запроса :

    Вызов запроса SetIntervalTimer не включает журналирование. Для журналирования должен быть указан конкретный фильтр (AddLogUser, AddLogAddress или AddLogRequestTime), который будет вызван до или после запроса SetIntervalTimer. Запрос SetIntervalTimer может быть выполнен в любой момент до или после установки фильтров. При его выполнении таймер перезапускается. Т.е. если нужно продлить время журналирования, достаточно выполнить этот запрос ещё раз.

    Указание таймера в параметре SetIntervalTimer не является обязательным, в таком случае журналирование всех запросов по умолчанию будет длиться 1 час. Даже после сброса с помощью Reset запроса. Пользовательское значение таймера сбрасывается на значение по умолчанию после перезапуска dvwebclient (т.е. значение времени таймера хранится в кэше Web-клиента).

    Время работы таймера отсчитывается с момента последнего запроса к API журналирования.

  5. Фильтры можно комбинировать. Ниже приведён пример включения фильтра для пользователя 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
  6. Чтобы отключить ведение расширенного журнала, нужно выполнить запрос в браузере:

    http://адрес-сервера-Web-клиента:ПОРТ/DiagnosticsLog/Reset