Ответ 1
Лучший способ узнать - пример. Прочитайте источник некоторых вещей с открытым исходным кодом, например, oh, Tomcat или что-то еще в вашей области приложений и посмотрите, что вы видите.
Какова наилучшая практика использования уровней log4j во время кодирования. Я имею в виду, когда мы используем регистрацию INFO, когда мы используем протоколирование протоколов DEBUG/ERROR и т.д.
Лучший способ узнать - пример. Прочитайте источник некоторых вещей с открытым исходным кодом, например, oh, Tomcat или что-то еще в вашей области приложений и посмотрите, что вы видите.
В целом, я следую этим рекомендациям:
Моя базовая линия всегда состоит в том, что уровень INFO эквивалентен System.out, а ERROR эквивалентен System.err.
DEBUG. Здесь вы размещаете всю информацию о трассировке и, в частности, информацию, которую вы не хотите видеть, когда ваш уровень комфорта "system.out".
INFO - используйте это для общих сообщений, сообщений о ходе выполнения, для сообщений, связанных с приложением, но не для трассировки.
WARN - сообщите, что что-то не так, возможно, неожиданно, или что обходной путь используется, но приложение все равно может продолжаться (тайм-аут сокета/повторные попытки, неверный ввод пользователя и т.д.).
ОШИБКА - предупреждает о проблемах, препятствующих нормальной работе вашего приложения, например. база данных отсутствует, отсутствует настройка начальной загрузки.
Общей ошибкой при написании библиотек является использование уровня ERROR для указания проблем с вызывающим приложением (кодом, использующим библиотеку), а не указанием реальных ошибок внутри самой библиотеки. См. Например, эта ошибка спящего режима → http://opensource.atlassian.com/projects/hibernate/browse/HHH-3731
Это действительно раздражает, потому что сообщения с уровня ERROR действительно трудно подавить, поэтому используйте их только для указания проблем с вашим собственным кодом.
Все. Я действительно не использую этот, он практически такой же, как DEBUG или TRACE.
Несмотря на то, что этот вопрос довольно старый, это действительно важный момент, который должен знать каждый разработчик, я настоятельно рекомендую вам проверить официальную страницу Apache log4j.
Также я нашел и полезное изображение, которое прекрасно описывает это, log4jImage, взятое из supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/log4j/log4j.html
TRACE: Наименьший уровень журнала. Предоставляет наиболее подробный уровень информации.
DEBUG: Заявление о регистрации здесь предназначено для помощи разработчикам. Подробное описание вашего приложения.
INFO: Общая информация о бизнесе. Прогресс и состояние вашего приложения
WARN: Предупреждения о неожиданных событиях. Они недостаточно серьезны, чтобы прервать ваше приложение.
ОШИБКА: Серьезные проблемы в вашем приложении.
Также важно иметь правильный уровень ведения журнала в разных средах.
ОШИБКА ведение журнала всегда должно быть включено.
INFO + DEBUG должен быть включен при поиске проблем/ошибок.
К тому, что другие упомянули, я бы добавил уровни TRACE и FATAL, первый хорош для очень подробного ведения журнала, а позже - для показа общей стоп-шоу. Существуют общие указания о том, как вы используете уровни, как упоминалось выше. Тем не менее, наиболее важно, как YOU будет использовать его и как ваши ПОЛЬЗОВАТЕЛИ будут их интерпретировать. Вам нужны уровни, чтобы сосредоточиться на проблемах, поэтому решите, в чем проблема в вашем случае. Вашим пользователям вряд ли когда-либо понадобятся отчеты о трассировке или отладке, но они определенно захотят устранить проблемы и сообщить о них вам.
Вот некоторые рекомендации, которые я использую:
DEBUG: запись, предназначенная только для глаз разработчиков - содержимое переменных, результаты сравнений и другие биты информации, которые помогают отлаживать бизнес-логику.
INFO: информация высокого уровня, такая как задача X, завершена или выполняется некоторое правило, и вот что я буду делать дальше из-за этого правила.
WARN: может возникнуть проблема, но она недостаточно серьезная, чтобы нанести реальный вред потоку бизнес-логики. Например, возможно, какая-то переменная иногда будет нулевой, но нам это не обязательно, или мы можем как-то ее обойти. В то же время мы все еще хотим знать об этом на всякий случай, если нам расскажут позже, нам нужно найти примеры этого или более тщательно изучить, почему это происходит.
ОШИБКА: серьезная проблема, которая, безусловно, нуждается в дальнейшем изучении, но недостаточно серьезная, чтобы остановить приложение от выполнения поставленной задачи.
FATAL: очень серьезная неожиданная проблема, с которой мы не можем работать или восстанавливаться, и даже не позволяем приложению делать что-то полезное.