1
2
3
|
if (LOG.isDebugEnabled()) { LOG.debug( "Logging some stuff = " + stuff); } |
Я хотел избавиться от isXXXEnabled и вот как я нашел Logback и SLF4J .
Logback и SLF4J
Logback в сочетании с SLF4J обеспечивает отличный API и быструю и мощную реализацию каркаса журналирования. Причины, по которым переключиться на Logback с log4j не являются темой этого поста, и они уже подробно описаны на веб-сайте logback . Вкратце, что вы получаете с Logback и SL4FJ:
- простой и быстрый способ пропустить isXXXEnabled с:
1
LOG.debug(
"Logging some stuff = {}"
, stuff);
- автоматическая перезагрузка файлов конфигурации
- мощные фильтры
- загрузка файла свойств в конфигурационный XML
- условная конфигурация
Благодаря инструменту миграции SLF4J миграция из log4j api в SLF4J происходит очень быстро. Я решил переключить все проекты на Logback, и через несколько месяцев я должен сказать, что я действительно доволен этим решением.
Чтобы использовать Logback в вашем проекте, добавьте следующие зависимости:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
< dependency > < groupId >org.slf4j</ groupId > < artifactId >slf4j-api</ artifactId > < version >1.6.4</ version > </ dependency > < dependency > < groupId >ch.qos.logback</ groupId > < artifactId >logback-classic</ artifactId > < version >1.0.1</ version > </ dependency > < dependency > < groupId >org.slf4j</ groupId > < artifactId >jcl-over-slf4j</ artifactId > < version >1.6.4</ version > </ dependency > |
Настройка уведомлений об ошибках с Logback
В приложении с надлежащей регистрацией каждая запись, зарегистрированная с уровнем ERROR, должна рассматриваться как проблема, которая должна быть исправлена.
Самым распространенным способом регистрации ошибок, конечно, является регистрация исключений с помощью трассировки стека в лог-файле, но если у вас есть несколько приложений на нескольких хостах, проверка ошибок может занять много времени. Более разумный способ — зарегистрировать их в базе данных — этого можно достичь с помощью DBAppender . Я нашел наиболее полезным, чтобы отправить все исключения на мою электронную почту, чтобы иметь возможность исправить их немедленно.
Чтобы настроить Logback для отправки писем с исключениями, нам нужно добавить зависимость Java Mail:
1
2
3
4
5
|
< dependency > < groupId >javax.mail</ groupId > < artifactId >mail</ artifactId > < version >1.4</ version > </ dependency > |
И определите конфигурацию для SMTPAppender в logback.xml:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
<? xml version = "1.0" encoding = "UTF-8" ?> < configuration > <!-- some application specific configuration here --> < appender name = "sheriff" class = "ch.qos.logback.classic.net.SMTPAppender" > < smtpHost >localhost</ SMTPHost > < subject >Something went wrong</ Subject > < layout class = "ch.qos.logback.classic.html.HTMLLayout" /> < filter class = "ch.qos.logback.classic.filter.ThresholdFilter" > < level >ERROR</ level > </ filter > </ appender > < root level = "ERROR" > < appender-ref ref = "sheriff" /> </ root > </ configuration > |
Благодаря ThresholdFilter с уровнем, установленным на ERROR, мы уверены, что даже если корневой уровень будет изменен, будут отправляться только сообщения об ошибках.
Теперь вы должны получить электронные письма, похожие на:
Пропуск уведомлений об ошибках в среде разработки
Вероятно, вам не нужно получать эти письма, приходящие из среды разработки, и благодаря условию в конфигурации обратного входа вы можете легко их пропустить.
Чтобы использовать условные выражения, вам нужно добавить зависимость к Janino :
1
2
3
4
5
|
< dependency > < groupId >janino</ groupId > < artifactId >janino</ artifactId > < version >2.5.10</ version > </ dependency > |
Следующее, что нужно знать, какова ваша среда. В конфигурации Logback вы можете получить доступ к системным свойствам, свойствам logback или специальным переменным, таким как HOSTNAME и CONTEXT_NAME, и к ним, чтобы определить вашу среду. В моем приложении я использую профили Spring для этого, поэтому моя конфигурация ROOT logger:
1
2
3
4
5
|
< root level = "ERROR" > < if condition = '"${spring.profiles.active}" == "production"' > < appender-ref ref = "sheriff" /> </ if > </ root > |
Несколько слов для пользователей log4j
Если вы решили придерживаться log4j, вы можете использовать его SMTPAppender .
Log4j может использоваться вместе с SLF4J благодаря библиотеке log4j-over-slf4j .
Вывод
Отправка почты с помощью Logback — не единственный способ сообщить об ошибках. Можно использовать Jabber appender или даже написать appender, который будет отправлять ошибки через SMS-шлюз. Тебе решать.
Какие решения для уведомлений об ошибках вы используете в своих проектах?
Ссылка: Уведомление об ошибках приложения с Logback от нашего партнера по JCG Мачея Волковяка в блоге журнала « Разработка программного обеспечения» .