Перейти к содержанию

Уровни логирования

Доступны шесть уровней: - all - debug - info - warn - error - off

Пример logging.json:

{
 "includes": [],
 "appenders": [{
     "name": "consoleout", 
     "type": "console",
     "args": {
       "stream": "std_out",
       "level_colors": [{
           "level": "debug",
           "color": "green"
         },{
           "level": "warn",
           "color": "brown"
         },{
           "level": "error",
           "color": "red"
         }
       ]
     },
     "enabled": true
   },{
     "name": "net",
     "type": "gelf",
     "args": {
       "endpoint": "10.10.10.10",
       "host": "test"
     },
     "enabled": true
   }
 ],
 "loggers": [{
     "name": "default",
     "level": "info",
     "enabled": true,
     "additivity": false,
     "appenders": [
       "consoleout",
       "net"
     ]
   },{
     "name": "net_plugin_impl",
     "level": "debug",
     "enabled": true,
     "additivity": false,
     "appenders": [
       "net"
     ]
   }
 ]
}

Смысл уровней

  • error — события, вероятно требующие вмешательства оператора.
  • Уровень error стоит оставлять для неожиданных ситуаций или тех, где нужен человек.
  • Также для явных ошибок ПО: невозможные значения перечислений, выход за границы массива, нулевые указатели и т.п., часто ведущие к исключению.
  • Замечание: сейчас много сообщений с уровнем error логичнее отнести к warn — например, в net_plugin_impl для плохих сетевых соединений, которые обрабатываются штатно; такие случаи лучше перевести на warn или info.
  • warn — неожиданное, но восстановимое.
  • Обычно не требует немедленного вмешательства, но частые warn могут сигнализировать о действиях оператора.
  • warn не стоит использовать просто как «информацию» — это сигнал обратить внимание, без обязательной тревоги.
  • info (по умолчанию) — полезная оператору информация.
  • Прогресс и полезные данные; стараются не засыпать логом: например, не логировать каждую транзакцию на info.
  • Для прогресса логируют через интервалы, например каждые 1000 транзакций.
  • debug — детали при включённом нетипичном логировании.
  • Вопрос: полезно ли это оператору, смотрящему лог. Объём как у info: не раздувать.
  • Включение debug должно прояснять поведение без лавины строк.
  • debug не заменяет трассировку; для неё — all (см. ниже).
  • Как и для info, не логировать каждую транзакцию на debug; для транзакций есть отдельные логгеры: transaction, transaction_trace_failure, transaction_trace_success, transaction_failure_tracing, transaction_success_tracing, transient_trx_success_tracing, transient_trx_failure_tracing.
  • all (trace) — то, что при debug засыпало бы лог.
  • Трассировочный уровень; поддержан частично.
  • Замечание: в будущем другая библиотека логирования может дать лучшую трассировку; текущая среда не рассчитана на огромный объём trace-вывода.