Уровни ошибок при логировании

В нашем проекте мы используем Monolog Logger, и не смотря на то, что к нему есть комментарии к видам ошибок, мы расширили эти знания и применяем такие правила информирования об ошибках.

/**
* Когда писать: чтобы отдебажить ситуацию на проде, потом удаляются.
* Как много их может быть: можно много и часто, к примеру:
* - все request/response,
* - все sql-запросы в базу
*/
const DEBUG = 100;

/**
* Когда писать: чтобы отслеживать ситуацию на проде, не удаляются.
* Как много их может быть: не много, к примеру:
* - результат какой-нибудь проверки по длинному циклу
* - запуск и завершение какой-нибудь консольной команы
*/
const INFO = 200;

/**
* Когда писать: это некритичные ошибки.
* Как много их может быть: сколько угодно.
* Это дефолтный уровень для логирования вещей вроде:
* - пошли к поставщику с запросом по такому-то направлению,
* - получили ответ, в нем N билетов, ждали M cекунд
*/
const NOTICE = 250;

/**
* для случаев вроде: 
* пришла ошибка от поставщика, но мы смогли это распарсить
* нет маппинга для отеля (мы его показываем, и даже продать можем, но могут быть проблемы)
* обнаружен конфликт в данных (опять же маппинг не консистентный, к примеру)
*
* для эксепшенов, которые обозначают ошибку, но в данноми конкретном месте мы их умеем хорошо обрабатывать, не роняя весь запрос.
*/
const WARNING = 300;

/**
* для ошибок в коде, непредвиденных эксепшенов
*/
const ERROR = 400;

Если Вы пишите конфиг и хотите выставить какой-либо уровень логирования по-умолчанию, обратите внимание:

  • на проде не должны записываться детальная информация (например debug), потому что лог-файл будет расти очень быстро
  • из-за большого кол-ва логов аггрегатор скорее всего загнется
  • вряд ли на проде нужен детальный лог, а если нужен, то его делают в рамках отдельного канала (по конкретной задачи и в необходимое время, а не постоянно)
  • по-дефолту конфиг пишется так, чтобы др. разработчикам было удобно разрабатывать, а если какому-то разработчику понадобится детальная информация в рамках какой-то задачи, то можно у себя локально указать нужный уровень логирования. Как вы поняли, других не принуждай читать логи определенной задачи (ведь это неудобно), когда ты пишешь код по своей задачи, а читаешь логи по какой-то др. задаче. Другим разработчикам скорее всего важны ошибки системы в целом и кода, который они затрагивают в данный момент.

 

Удачки.


05.10.2015 13:38