|
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> <from>sheriff@mycompany.com</From> <to>john@mycompany.com</To> <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 Мачея Волковяка в блоге журнала « Разработка программного обеспечения» .
