Как определить, какой уровень журнала использовать?

Уровни журнала WARN, ERROR и FATAL довольно понятны. Но когда что-то DEBUG, а когда INFO?

Я видел несколько проектов, которые досадно многословны на уровне INFO, но я также видел код, который слишком сильно поддерживает уровень DEBUG. В обоих случаях полезная информация скрыта в шуме.

Каковы критерии для определения уровней журнала?

6 ответов

Решение

Я не думаю, что есть какие-то жесткие правила; используя уровни типа log4j, мои "эмпирические правила" выглядят примерно так:

  • ФАТАЛЬНО: приложение (или, по крайней мере, поток) вот-вот ужасно умрет. Это где информация, объясняющая, почему это происходит.
  • ОШИБКА: то, что приложение делает, что не должно. Это не ошибка пользователя ("неверный поисковый запрос"); это ошибка подтверждения, проблема с сетью и т. д. и т. д., вероятно, которая приведет к прерыванию текущей операции
  • ПРЕДУПРЕЖДЕНИЕ: что-то, что касается, но не вызывает прерывание операции; # количество соединений в пуле БД становится низким, необычное, но ожидаемое время ожидания в операции и т. д. Я часто думаю о WARN как о чем-то полезном в совокупности; например, grep, group и count их, чтобы получить представление о том, что влияет на здоровье системы
  • ИНФОРМАЦИЯ: нормальное ведение журнала является частью нормальной работы приложения; диагностический материал, чтобы вы могли вернуться и сказать: "как часто выполнялась эта операция общего уровня?" или "как данные пользователя попали в это состояние?"
  • ОТЛАДКА: по умолчанию выключена, может быть включена для отладки определенных непредвиденных проблем. Здесь вы можете записать подробную информацию о ключевых параметрах метода или другую информацию, которая полезна для поиска вероятных проблем в определенных "проблемных" областях кода.
  • TRACE: "Серьезно, WTF здесь происходит?!?! Мне нужно регистрировать каждую отдельную инструкцию, которую я выполняю, чтобы найти эту @#$@ing ошибку повреждения памяти, прежде чем я сойду с ума"

Не в камне, но грубое представление о том, как я об этом думаю.

Неформально я использую такую ​​иерархию,

  • DEBUG - фактические значения трассировки
  • ИНФОРМАЦИЯ - Что-то только что произошло - ничего важного, только флаг
  • ВНИМАНИЕ - все работает, но что-то не совсем то, что ожидалось
  • ОШИБКА - произошло что-то, что нужно исправить, но мы можем продолжать и выполнять другие (независимые) действия
  • FATAL - достаточно серьезная проблема, которую мы не должны продолжать

Я обычно выпускаю с записью INFO, но только если я знаю, что файлы журнала действительно проверены (и размер не имеет значения), иначе это ПРЕДУПРЕЖДЕНИЕ.

Подумайте, кому нужно использовать каждый уровень. В моем коде я оставляю DEBUG зарезервированным для вывода разработчика, например, вывода, который только помог бы разработчику. VERBOSE используется для обычного пользователя, когда требуется много информации. ИНФОРМАЦИЯ Я использую, чтобы обычно показывать основные события (например, отправка веб-страницы, проверка чего-то важного).

И FAIL и WARN довольно понятны.

Соглашение в моей команде заключается в использовании debug если что-то вычислено в сообщении, тогда как info используется для простого текста. Так в действительности info покажет вам, что происходит и debug покажет ценности вещей, которые происходят.

Я стремлюсь нацелить ИНФО на пользователя, чтобы дать ему сообщения, которые даже не являются предупреждениями. DEBUG, как правило, предназначен для разработчиков, где я выводю сообщения, чтобы помочь отследить поток через код (также со значениями переменных).

Мне также нравится другой уровень DEBUG (DEBUG2?), Который дает абсолютную загрузку отладочной информации, такой как шестнадцатеричные дампы всех буферов и так далее.

Там нет необходимости для уровня DEBUG2. Вот для чего "TRACE". TRACE предназначен для того, чтобы быть абсолютно низким уровнем ведения журнала, выводя все возможные фрагменты информации, которые вы можете захотеть увидеть.

Чтобы избежать потока информации, обычно не рекомендуется включать ведение журнала уровня трассировки для всего проекта. Вместо этого используйте "DEBUG", чтобы узнать общую информацию об ошибке и ее местонахождении (отсюда и название), а затем включите TRACE только для этого компонента, если вы все еще не можете его выяснить.

Другие вопросы по тегам