События системного журнала#
Настройки логирования#
Логирование происходит одним из 3 способов:
console- запись в консоль вstdout(илиstderrесли это установлено в настройках);file- запись в файл;conn- запись в сокет (сеть или Unix).
Настройка логирования осуществляется в разделе [log] конфигурационного файла (app.ini):
[log]используется для основных настроек.[log.<mode-name>]- указывает, куда записывать логи (console,file,conn).[log]также может содержать настройки вспомогательного логгера по следующей схеме:logger.<logger-name>.<CONFIG-KEY>.
Раздел [log]#
Ниже представлены основные параметры раздела (подробное описание далее по тексту):
Параметр |
Описание |
|---|---|
|
Уровень логирования (по умолчанию: |
|
Размер буфера. Актуально для логирования в файл. Для немедленного отображения записей в лог-файле необходимо указать значение = |
|
Логгеры, которые можно настраивать отдельно в своих секциях конфигурации по именам |
|
Путь до каталога, в котором хранятся логи (по умолчанию: |
|
Настройка выводимой в лог информации. Рекомендуемое значение |
|
Настройка роутер-логгера (по умолчанию: |
|
Настройка логгера доступа. Рекомендуемое значение |
|
Список выходных данных журнала, которые будут использоваться для XORM-логгера (по умолчанию: |
|
Уровень логирования, предоставляющий подробную информацию при выводе стэка трасcировки вызова в случае ошибки в работе приложения (по умолчанию: |
|
Шаблон вывода информации для логгера доступа. Позволяет настроить вид сообщения и перечень выходных данных. Подробное описание см. ниже в разделе Логгер доступа |
Запятая (,) в режиме вспомогательного логгера (logger.router.MODE/logger.access.MODE/logger.xorm.MODE) означает использование глобального режима (MODE) по умолчанию.
Пример настроек
[log]
LEVEL = info
STACKTRACE_LEVEL = none
BUFFER_LEN = 10000
MODE = console, file
ROOT_PATH = sc/log
ENABLE_SSH_LOG = false
ACCESS_LOG_TEMPLATE = {{.Ctx.Req.Method}} {{.Ctx.Req.URL.RequestURI}}, Body: {{.Body}}, Status: {{.ResponseWriter.Status}}, Size: {{.ResponseWriter.Size}}, Host: {{.Ctx.RemoteHost}}, User: {{.Identity}}, Start: {{.Start.Format "[02/Jan/2006:15:04:05.000000 -0700]" }}, End: {{.End.Format "[02/Jan/2006:15:04:05.000000 -0700]" }}, Duration: {{.Duration}}
REQUEST_ID_HEADERS =
logger.access.MODE = console
logger.router.MODE =
FLAGS = date,time,microseconds,shortfile,shortfuncname,level
Примеры событий системного журнала#
Уровень Info
2023/09/05 13:12:11.226101 acceslogsbt.go:135:1() [INFO] [TraceId: edc303b8-756b-4cb0-922b-97c845a3739a] POST /user/settings, Body: {"_csrf":"zdZcDAtI6wT4uDdApgrX4yDkADQ6MTY5MzkwODEyMzU3NzI3NzAwMA","description":"","full_name":"","location":"","name":"testuser1","visibility":"0","website":""}, Status: 303, Size: 0, Host: ::1, User: testuser, Start: [05/Sep/2023:13:12:11.208572 +0300], End: [05/Sep/2023:13:12:11.226012+0300], Duration: 17.440342ms
Параметр |
Описание |
|---|---|
2023/09/05 |
Дата события |
13:12:11.226101 |
Время события |
TraceId |
Системный параметр |
Body |
Тело сообщения |
Status |
Код состояния HTTP |
User |
Имя пользователя |
Start |
Дата и время начала события |
End |
Дата и время окончания события |
Duration |
Длительность запроса в мс |
Уровень Debug
2023/09/05 13:12:11.219343 profile.go:93:ProfilePost() [DEBUG] Changing name for testuser to testuser1
Параметр |
Описание |
|---|---|
2023/09/05 |
Дата события |
13:12:11.219343 |
Время события |
Changing name for testuser to testuser1 |
Изменение имени пользователя с testuser на testuser1 |
Настройки логирования по умолчанию#
[log]
ROOT_PATH = %(SC_WORK_DIR)/log
MODE = console
LEVEL = Info
STACKTRACE_LEVEL = None
logger.router.MODE = ,
logger.xorm.MODE = ,
logger.access.MODE =
[log.console]
MODE = console
FLAGS = stdflags
PREFIX =
COLORIZE = true
Это эквивалентно отправке всех логов в консоль, при этом логи Golang по умолчанию также выводятся в консоли.
Обратите внимание
Настройки выше указаны для примера и не рекомендуются для указания в конфигурационном файле.
Отключение роутер-логгера и запись логов доступа в файл#
В примере ниже роутер-логгер отключен, логи доступа (>=Warn) записываются в access.log:
[log]
logger.router.MODE =
logger.access.MODE = access-file
[log.access-file]
MODE = file
LEVEL = Warn
FILE_NAME = access.log
Настройка уровней логирования для разных режимов#
Логи по умолчанию (>=Warn) записываются в sc.log, в то время как логи с ошибками (Error) сохраняются в file-error.log.
[log]
LEVEL = Warn
MODE = file, file-error
; по умолчанию, при записи логов в файл они записываются в %(log.ROOT_PATH)/sc.log, поэтому настраивать путь не нужно.
; [log.file]
[log.file-error]
LEVEL = Error
FILE_NAME = file-error.log
Выходные данные журнала (режим и регистратор выходных данных)#
Общие настройки#
EXPRESSION
EXPRESSION представляет собой регулярное выражение, с которым должны совпадать события логирования для того, чтобы быть записанными регистратором. Совпадать должно либо сообщение журнала (цвет текста не учитывается), либо longfilename:linenumber:functionname. Все сообщение или строка не обязательно должны полностью совпадать.
FLAGS
FLAGS представляет информацию о контексте логирования, которая выводится перед каждым сообщением. Это набор строковых данных, разделенных запятыми. Порядок значений не важен.
По умолчанию используется значение stdflags (= date,time,medfile,shortfuncname,levelinitial). Возможные значения:
noneor,- отсутствие флагов;date- дата в локальном часовом поясе:2009/01/23;time- время в локальном часовом поясе:01:23:23;microseconds- время в микросекундах:01:23:23.123123;longfile- полное имя файла и номер строки:/a/b/c/d.go:23;shortfile- последний элемент имени файла и номер строки:d.go:23;funcname- имя функции, в которой была вызвана запись:runtime.Caller();shortfuncname- последняя часть имени функции. Переопределяет имя функцииfuncname;utc- если установлена дата или время, используйте UTC вместо локального часового пояса;levelinitial- первая буква в названии уровня логирования. Например,[I]для уровня логирования INFO;level- уровень логирования, например[INFO];gopid- Goroutine-ID;medfile- последние 20 символов имени файла. Эквивалентноshortfile,longfile;stdflags- эквивалентноdate,time,medfile,shortfuncname,levelinitial.
Запись логов в консоль#
При записи в консоль используются следующие настройки:
Параметр |
Описание |
|---|---|
|
Параметр для выделения цветом блоков логирования. При записи логов в консоль значение по умолчанию |
|
Стандартный поток вывода ошибок для программ. Если |
При записи в консоль логгер перенаправляет сообщения с логами в потоки stdout и stderr, прикрепленные к процессу в SourceControl.
Запись логов в файл#
При записи логов в файл используются следующие настройки:
Параметр |
Значение |
Описание |
|---|---|---|
|
По умолчанию: |
Файл для записи событий логирования. Относится к |
|
|
Максимальный размер файла (28 эквивалентно 256 Мбайт), определяется путем сдвига влево на единицу заданное количество раз (1 << x) |
|
|
Включает ротацию log-файлов. На основании других настроек ( |
|
|
Ежедневная ротация логов |
|
|
Удалить измененные файлы журнала по истечении этого количества дней |
|
|
Сжатие старых файлов с логами по умолчанию в gzip. |
|
|
Уровень сжатия файла. Возможные значения: от 1 до 9 (включительно), где более высокое значение означает более сильное сжатие |
Обратите внимание
Сильное сжатие может сопровождаться более высоким потреблением ресурсов. ПередCOMPRESSION_LEVELдолжен стоять знак-.
Запись логов в сеть#
При записи в сеть логгер отправляет сообщения с логами посредством сетевого сокета. Рекомендуются следующие настройки:
Параметр |
Значение |
Описание |
|---|---|---|
|
|
Адрес подключения |
|
|
Протокол ( |
|
|
Попытка переподключения при потере соединения |
|
|
Повторное подключение хоста для каждого отдельного сообщения |
Роутер-логгер#
При включении обработчиков маршрутов роутер-логгер записывает следующие типы сообщений:
started- сообщения записываются на уровнеTRACE.polling/completed-роутеры записываются на уровнеINFO. Исключение: «/assets» статические запросы ресурсов также логируются на уровнеTRACE.slow-роутеры логируются на уровнеWARN.failed-роутеры логируются на уровнеWARN.
XORM-логгер#
XORM-библиотека - ORM-библиотека для языка Go, которая позволяет хранить структуры данных приложения в базе данных без дополнительных преобразований.
Для того чтобы XORM выводил SQL-логи, необходимо установить значение LOG_SQL = true в разделе [database].
Логгер доступа#
Логгер доступа обеспечивает формат журнала, совместимый с NCSA Common Log. Он легко настраивается, но следует соблюдать осторожность при изменении его шаблона. Основным преимуществом этого логгера является то, что SourceControl может логировать доступы в стандартном формате журнала, поэтому можно использовать стандартные инструменты.
Включить логгер доступа можно, используя logger.access.MODE.
Обратите внимание
Логгер доступа записывает логи на уровнеINFO. Установка значенияLEVELэтого логгера наWARNили выше приведет к отсутствию журналов доступа.
ACCESS_LOG_TEMPLATE
Шаблон вывода информации для логгера доступа. Позволяет настроить вид сообщения и перечень данных. В шаблоне можно использовать данные из кода программы. Рекомендуемое значение:
{{.Ctx.Req.Method}} {{.Ctx.Req.URL.RequestURI}}, Body: {{.Body}}, Status: {{.ResponseWriter.Status}}, Size: {{.ResponseWriter.Size}}, Host: {{.Ctx.RemoteHost}}, User: {{.Identity}}, Start: {{.Start.Format "[02/Jan/2006:15:04:05.000000 -0700]" }}, End: {{.End.Format "[02/Jan/2006:15:04:05.000000 -0700]" }}, Duration: {{.Duration}}
В шаблон передаются следующие параметры:
Параметр |
Описание |
|---|---|
|
HTTP метод запроса |
|
Путь запроса |
|
JSON-тело запроса (если в запросе передается поле «password», то оно исключается из вывода) |
|
Итоговый HTTP статус запроса |
|
Размер запроса в байтах |
|
DNS-имя или IP-адрес источника запроса |
|
Имя пользователя, если запрос был от аутентифицированного пользователя, либо |
|
Время начала выполнения запроса |
|
Время завершения выполнения запроса |
|
Продолжительность выполнения запроса |
Обратите внимание
Необходимо соблюдать осторожность при изменении этого шаблона, поскольку он работает за пределами обработчика аварийного восстановления. Шаблон также должен быть простым, так как он выполняется для каждого запроса.