2009-12-30 1 views
15

Какова наилучшая практика использования уровней log4j во время кодирования. Я имею в виду, когда мы используем каротаж INFO, когда мы используем регистрацию журналов DEBUG/ERROR и т. Д.Использование уровней log4J

+1

довольно субъективно. Возможно, Community Wiki будет уместным? – bmargulies

ответ

7

Лучший способ узнать на примере. Читайте источник некоторых вещей с открытым исходным кодом, например, oh, Tomcat или что-то еще в вашей области приложений, и посмотрите, что вы видите.

+0

Hibernate - еще одна хорошая для справки –

+0

Hibernate на самом деле не такая отличная ссылка для этого IMO, см., Например, ссылку в моем ответе. Я думаю, что весной является хорошим примером, а также кварцем, осью 2 и аналогичными проектами. – Yoni

0

ОШИБКА регистрация всегда должна быть включена.

INFO + DEBUG должен быть включен при обнаружении проблем/ошибок.

+0

Он имеет в виду «использовать», как в «enable» или «use», как в «который я вызываю когда»? – bmargulies

+0

Хм, хороший момент! –

+0

Спасибо за ответ. Из вашего ответа я прочитал, что ERROR - это уровень, который должен использоваться в производстве, и INFO/DEBUG необходимо установить в зависимости от требований в случае устранения неполадок. Просьба уточнить, насколько я прав. –

18

В общем, я следую этим правилам:

  • DEBUG: низкий уровень набить. кэшу, промах кэша, открывая соединение дб
  • INFO: события, которые имеют бизнес-смысл - создание клиента, заряжая куб.см ...
  • WARN: может быть проблемой, но не остановить приложение. адрес электронной почты не найден/недействителен
  • ОШИБКА: непредвиденная проблема. не удалось открыть соединение db. и т.д ...
+0

log4j также имеет уровень [FATAL] (https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html#FATAL) и [TRACE] (https: // logging. apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html#TRACE). Для log4j2 см. [Эта страница] (https://logging.apache.org/log4j/2.0/log4j-api/apidocs/org/apache/logging/log4j/Level.html) –

10

Мой базовый всегда что INFO уровень эквивалентен System.out и ERROR эквивалентно System.err.

DEBUG - Здесь вы размещаете всю информацию о трассировке и, в частности, информацию, которую вы не хотите видеть, когда ваш уровень комфорта «system.out».

INFO - используйте это для сообщений общего доступа, сообщений о выполнении, для сообщений, связанных с приложением, но не для трассировки.

WARN - сообщите, что что-то не так, возможно, неожиданно, или что обходной путь используется, но приложение все равно может продолжаться (тайм-аут сокета/повторные попытки, неверный ввод пользователя и т. Д.).

ОШИБКА - предупреждает о проблемах, препятствующих нормальной работе вашего приложения, например. база данных отсутствует, отсутствует настройка начальной загрузки.

Распространенная ошибка при написании библиотек заключается в использовании уровня ERROR для указания проблем с вызывающим приложением (кодом, использующим библиотеку) вместо указания реальных ошибок внутри самой библиотеки. См. Например, эта ошибка спящего режима ->http://opensource.atlassian.com/projects/hibernate/browse/HHH-3731

Это действительно раздражает, потому что сообщения с уровня ERROR действительно трудно подавить, поэтому используйте их только для указания проблем с вашим собственным кодом.

Все - Я действительно не использую этот, он практически такой же, как DEBUG или TRACE.

+0

Также NHibernate использует уровень INFO для регистрации каждого SQL, который генерирует, что раздражает, поскольку я, как правило, оставляю INFO по умолчанию в производственных системах. Это должно быть DEBUG IMHO. – Andy

+0

Я согласен со списком значений, но у меня совсем другое понимание System.out/err (которое основано на Unix-оболочке: out для «вывода, на который надеялся пользователь», а err - «материал, который может помогите, если приложение, выполняющее регистрацию, нуждается в исправлении ». Таким образом, * all * log4j output - это материал System.err, приложения из командной строки отправляют свои материалы System.out в System.out; webapps отправляет свои материалы System.out в Интернет ответ DTO). Лучше просто удалить или игнорировать абзац «Моя базовая линия». – jackr

0

К тому, о чем говорили другие, я бы добавил уровни TRACE и FATAL, первый из них хорош для очень подробного ведения журнала, а позднее - для показа общей стоп-шоу. Существуют общие указания о том, как вы используете уровни, как упоминалось выше. Тем не менее, самый важный - это как YOU будет использовать его и как ваши ПОЛЬЗОВАТЕЛИ будут их интерпретировать. Вам нужны уровни, чтобы сосредоточиться на проблемах, поэтому решите, в чем проблема в вашем случае. Вашим пользователям вряд ли когда-либо понадобятся отчеты о трассировке или отладке, но они обязательно захотят прибить проблемы и сообщить о них вам.

2

Несмотря на этот вопрос довольно старый, это действительно важный момент, который должен знать каждый разработчик, я настоятельно рекомендую вам ознакомиться с официальной страницей Apache log4j.

Кроме того, я нашел и полезный образ, который описывает это прекрасно, log4jImage взяты из supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/log4j/log4j.html

2

TRACE: Минимальный уровень бревен. Обеспечивает наиболее подробный уровень информации.

DEBUG: Заявление о регистрации здесь предназначено для помощи разработчикам. Подробное описание вашего приложения.

INFO: Общая информация о бизнесе. Прогресс и состояние вашей заявки

WARN: Предупреждения о непредвиденных событиях. Они недостаточно серьезны, чтобы прервать ваше приложение.

ОШИБКА: Серьезные проблемы в вашем приложении.

Также важно иметь правильный уровень ведения журнала в разных средах.

0

Вот некоторые рекомендации, которые я использую:

  • TRACE: многословным ведение журнала для отладки очень низкого уровня, то я обычно не нужно видеть в журнале, если нет какого-то очень неясными или необычный вопрос.
  • DEBUG: регистрация, предназначенная только для глаз разработчиков - содержимое переменных, результаты сравнений и другие биты информации, которые помогают отлаживать бизнес-логику.

  • INFO: информация высокого уровня, такая как задача X, завершена или некоторое правило выполнено, и вот что я буду делать дальше из-за этого правила.

  • WARN: может возникнуть проблема, но это не является достаточно серьезным, чтобы нанести реальный вред потоку бизнес-логики. Например, возможно, какая-то переменная иногда будет нулевой, но нам это не обязательно, или мы можем как-то ее обойти. В то же время мы все еще хотим знать об этом на всякий случай, когда нам говорят позже, нам нужно найти примеры этого или более тщательно изучить, почему это происходит.

  • ОШИБКА: Серьезная проблема, которая, безусловно, нуждается в дальнейшем изучении, но недостаточно серьезная, чтобы остановить приложение от выполнения поставленной задачи.

  • FATAL: Очень серьезная неожиданная проблема, с которой мы не можем работать или восстанавливаться, а может даже препятствовать приложению делать что-то полезное.

 Смежные вопросы

  • Нет связанных вопросов^_^