if (LOG.isDebugEnabled()) {LOG.debug("Logging some stuff = " + stuff);
}
我想擺脫isXXXEnabled,這就是我找到Logback和SLF4J的方式 。 ?
登錄和SLF4J
與SLF4J結合使用的Logback提供了出色的API和快速強大的日志記錄框架實現。 從log4j切換到Logback的原因不是本文的主題,它們已經在logback網站上進行了詳細描述。 很快,您會發現Logback和SL4FJ有什么用:
- 跳過isXXXEnabled的簡單快速方法:
LOG.debug("Logging some stuff = {}", stuff);
- 自動重載配置文件
- 強大的日志過濾器
- 將屬性文件加載到配置xml中
- 條件配置
借助SLF4J遷移工具,從log4j api遷移到SLF4J的速度非常快。 我已經決定將所有項目都切換到Logback,幾個月后,我不得不說我對這個決定感到非常滿意。
為了在您的項目中使用Logback,請添加以下依賴項:
<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依賴項:
<dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4</version>
</dependency>
并在logback.xml中定義SMTPAppender的配置:
<?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,我們可以確保即使更改了根級別,也只能發送錯誤郵件。
現在,您應該會收到類似于以下內容的電子郵件:

在開發環境中跳過錯誤通知
可能您將不需要接收來自開發環境的那些郵件,并且由于有logback配置中的條件,您可以輕松地跳過它們。
為了使用條件,您需要向Janino添加依賴項:
<dependency><groupId>janino</groupId><artifactId>janino</artifactId><version>2.5.10</version>
</dependency>
下一步是了解您的環境。 在Logback配置中,您可以訪問系統屬性,logback屬性或特殊變量(例如HOSTNAME和CONTEXT_NAME)以及它們來確定您的環境。 在我的應用程序中, 我使用Spring配置文件 ,因此我的ROOT記錄器配置為:
<root level="ERROR"><if condition='"${spring.profiles.active}" == "production"'><appender-ref ref="sheriff" /></if>
</root>
log4j用戶的常用詞匯
如果您決定堅持使用log4j,則可以使用SMTPAppender 。
由于log4j-over-slf4j庫,Log4j可以與SLF4J一起使用。 ?
結論
使用Logback發送郵件不是通知錯誤的唯一方法。 可以使用Jabber附加程序 ,甚至可以編寫將通過SMS網關發送錯誤的附加程序。 由你決定。
您在項目中使用了哪些錯誤通知解決方案?
參考: Software Development Journey博客上的JCG合作伙伴 Maciej Walkowiak提供了帶有Logback的應用程序錯誤通知 。
翻譯自: https://www.javacodegeeks.com/2012/07/logback-application-errors-notification.html