登錄:應用程序錯誤通知

幾個月前,當我進行大型應用程序重構時,發現用于記錄日志的基于log4j的代碼確實令人討厭,重復了數百次:

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372098.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372098.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372098.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win10 oracle怎樣卸載,Win10系統卸載Oracle 11g數據庫的方法

說起Oracle 11g數據庫編程人員沒有一個不知道的&#xff0c;雖然它很好用&#xff0c;但是有時候我們也會想去卸載它&#xff0c;那么系統城win10純凈版怎么卸載Oracle 11g數據庫呢&#xff1f;不知道的朋友趕緊看看小編整理的卸載Oracle 11g數據庫的方法吧&#xff01;具體卸載…

.net 連接數據庫

""符號是防止將后面字符串中的"\"解析為轉義字符. using System.Data; using System.Data.SqlClient; ... string strConnection"user idsa;password;"; strConnection"initial catalogNorthwind;ServerYourSQLServer;"; st…

mysql DCL數據控制語言

-- 維護性操作 都是在cmd下操作的連接數據庫&#xff1a; 本機&#xff1a;mysql [-h localhost] -u account -p 遠程&#xff1a;mysql [-h remote_ip] -u account -p 顯示當前所有數據庫&#xff1a;show databases; 切換數據庫&#xff1a;use db_name; …

如何分析線程轉儲–線程堆棧跟蹤

本文是“ 線程轉儲”分析系列的第5部分。 到目前為止&#xff0c;您已經了解了線程的基本原理以及它們與Java EE容器和JVM的交互。 您還學習了HotSpot和IBM Java VM的不同線程轉儲格式。 現在是您深入分析過程的時候了。 為了使您能夠從線程轉儲中快速識別問題模式&#xff0c;…

linux想要ping需要開啟哪個端口,linux下iptales配置

linux iptables存放位置/etc/sysconfig/iptables[roottp ~]#iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT[roottp ~]#iptables -R INPUT 4 -s 172.17.99.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT[roottp ~]#iptables…

設計模式學習筆記(十三:原型模式)

1.1概述 用原型實例指定創建對象的種類&#xff0c;并且通過復制這些原型創建新的對象。這就是原型模式的定義。 在某些情況下&#xff0c;可能不希望反復使用類的構造方法創建許多對象&#xff0c;而是希望使用該類創建一個對象后&#xff0c;以該對象為原型得到該對象的若干個…

翻譯的一篇關于學習編程語言的小文章

Top programming languages to get a job in Toronto in 2017 在程序開發人員和軟件工程師中最容易被提及的問題之一就是&#xff1a;“我要學的下一門編程語言該是誰&#xff1f;” 我想去選一個編程語言&#xff0c;我希望你能給我一些關于經常使用到的編程語言的建議&#x…

從linux內核啟動,學習Linux內核啟動過程:從start_kernel到init

一、實驗步驟&#xff1a;1&#xff1a;運行menuos&#xff1a;a)cd LinuxKernel/b)qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img啟動后啟動了MenuOS。2:使用gdb調試跟蹤menuos內核啟動和運行過程&#xff1b;a)qemu -kernel linux-3.18.6/arch/x86/bo…

【轉】nginx的優缺點

原博文出自于&#xff1a;http://blog.csdn.net/a454211787/article/details/22494485 感謝! 1、nginx相對于apache優點&#xff1a; 輕量級同樣起web 服務比apache占用更少內存及資源 抗并發nginx 處理請求異步非阻塞而apache 則阻塞型高并發下nginx 能保持低資源低消耗高…

與Maven 3,Failsafe和Cargo插件的集成測試

開箱即用&#xff0c;可以在Maven中進行單元測試。 因此&#xff0c;它也經常用于集成測試。 這樣做的主要缺點是集成測試可能需要花費更多的時間來執行&#xff0c;并且因為沒有人喜歡每次構建都要等待很長時間–使用-Dmaven.test.skiptrue標志可以跳過測試 為了執行與Maven的…

Spring入門第二十五課

使用具名參數 直接看代碼&#xff1a; db.properties jdbc.userroot jdbc.passwordlogan123 jdbc.driverClasscom.mysql.jdbc.Driver jdbc.jdbcUrljdbc:mysql://localhost:3306/selective-courses-systemjdbc.initPoolSize5 jdbc.maxPoolSize10 applicationContext.xml <?x…

linux強制回收內存,Linu系統cache強制回收

LINUX的內存管理機制&#xff0c;一般情況下不需要特意去釋放已經使用的cache。Cache機制的存在&#xff0c;使得Linux對磁盤的讀寫速度是有較大的好處的。 在 Linux 操作系統中&#xff0c;當應用程序需要讀取文件中的數據時&#xff0c;操作系統先分配一些內存&#xff0c;將…

HDU 1412 {A} + {B}

Problem Description給你兩個集合。要求{A} {B}.注:同一個集合中不會有兩個同樣的元素.Input每組輸入數據分為三行,第一行有兩個數字n,m(0<n,m<10000),分別表示集合A和集合B的元素個數.后兩行分別表示集合A和集合B.每一個元素為不超出int范圍的整數,每一個元素之間有一個…

Google API:如何訪問Google Analytics(分析)數據?

在深入研究Google Analytics&#xff08;分析&#xff09;API之前&#xff0c;了解一些Google Analytics&#xff08;分析&#xff09;術語及其關系總是很有用的。 Google帳戶&#xff1a;要訪問Google Analytics&#xff08;分析&#xff09;&#xff0c;用戶將需要一個Google…

為什么linux的新得立軟件下載,linux,debian_蝶變(Debian)_Xfce_新立得軟件管理_安裝不上軟件了,怎么處理?,linux,debian - phpStudy...

蝶變(Debian)_Xfce_新立得軟件管理_安裝不上軟件了,怎么處理&#xff1f;(synaptic:9573): GLib-CRITICAL **: g_child_watch_add_full: assertion pid > 0 failed正在預設定軟件包 ...(正在讀取數據庫 ... 系統當前共安裝有 343467 個文件和目錄。)正準備解包 .../libc6-db…

設計模式學習筆記(十六:橋接模式)

1.1概述 將抽象部分與它的實現部分分離&#xff0c;使他們都可以獨立地變化。這就是橋接模式的定義。 抽象類或接口中可以定義若干個抽象方法&#xff0c;習慣上將抽象方法稱作操作。抽象類或接口使程序的設計者忽略操作的細節&#xff0c;即不必考慮這些操作是如何實現的&…

Request的getParameter和getAttribute方法的差別

HttpServletRequest.getParameter("modelName");能取到想要的modelObject嗎&#xff1f;經過測試之后。發現是不能的。后來想想。其它道理挺簡單的&#xff0c;當兩個Web組件之間為轉發關系時&#xff0c;轉發源會將要共享request范圍內的數據先用setAttribute將數據…

Spring Social入門–第2部分

幾周前&#xff0c;我寫了一篇文章&#xff0c;展示了我認為可以使用Spring Social編寫的最簡單的應用程序。 該應用程序讀取并顯示了Twitter用戶的公共數據&#xff0c;并被編寫為Spring Social和社交編碼領域的介紹。 但是&#xff0c;讓您的應用程序顯示用戶的公共數據只是故…

linux靜默刪除文件夾,Linux常用命令10 - unzip

zip 是最廣泛使用的歸檔文件, 除了linux&#xff0c;windows也是非常的廣泛。&#xff0c;支持無損數據壓縮。 zip 文件是包含一個或多個壓縮文件或目錄的數據容器。接下來&#xff0c;我將解釋如何使用 unzip 命令通過命令行解壓縮 Linux 系統中的文件。 還有與之對應就是 zip…

Git學習筆記(一) 安裝及版本庫介紹

安裝Git 最早Git是在Linux上開發的&#xff0c;很長一段時間內&#xff0c;Git也只能在Linux和Unix系統上跑。不過&#xff0c;慢慢地有人把它移植到了Windows上。現在&#xff0c;Git可以在Linux、Unix、Mac和Windows這幾大平臺上正常運行了。 在Linux上安裝Git 首先&#xff…