logback錯誤日志發送郵件


logback

一、介紹

logback是由log4j的作者開發的一個開源日志組件,用以替代log4j。

logback由3個部分組成:

♦ logback-core (基礎模塊)

♦ logback-classic (log4j改進版,實現slf4j)

♦ logback-access (與servlet交互的模塊,提供通過Http來訪問日志的功能)

二、logback對比log4j

1. 性能

logback重寫內核,性能提升,內存加載小。

2. 充分測試

以年為單位的測試時間。

3. logback-classic原生實現slf4j

log4j還需要一個中間轉換層。

4. 文檔內容豐富

官網200pages+。

5.  XML配置文件熱加載

logback-classic能自動重新加載配置文件。

6. 從I/O錯誤中優雅恢復

RollingFileAppender能夠非常友好地從I/O異常中恢復。

7. 自動刪除日志歸檔

可以控制日志文件的最大數量或超時刪除時間。

8. 自動壓縮日至歸檔

自動壓縮已經打出來的日志文件,壓縮過程應用不受影響。

9. 配置文件適應不同環境

加入條件判斷,區分開發,測試,生產。

10. SiftingAppender

可篩選Appender。

11. 異常棧信息帶有包信息

打堆棧樹日志時,有包的信息。

三、logback依賴jar

♦ slf4j-api

♦ logback-core

♦ logback-classic

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.9</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.0.13</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.3</version>
</dependency>

 logback-mail

一、發送郵件依賴jar

♦ mail

♦ janino

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.4</version>
</dependency>
<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
    <version>2.7.8</version>
</dependency>

二、配置logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 控制台輸出 -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <encoder>
            <!-- 格式化輸出:%date(d%)表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度, -->
<!-- %logger{36}表示logger名字最長36個字符,否則按照句點分割,%msg:日志消息,%n是換行符
--> <pattern>%date{MM:dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 輸出DEBUG級別日志文件的appender --> <appender name="RollingFileRun" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> <File>/data/tomcat/runtime/debug.log</File> <!-- 按每小時滾動文件,如果一個小時內達到100M也會滾動文件, 滾動文件將會壓縮成zip格式, 最多保留672個滾動文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/data/tomcat/runtime/debug-%d{yyyy-MM-dd_HH}.%i.zip</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>672</maxHistory> </rollingPolicy> <encoder> <!-- 格式化輸出:%date(d%)表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度, -->
<!-- %logger{36}表示logger名字最長36個字符,否則按照句點分割,%msg:日志消息,%n是換行符
--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 輸出ERROR級別日志文件的appender --> <appender name="RollingFileError" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <File>/data/tomcat/error/error.log</File> <!-- 按每小時滾動文件,如果一個小時內達到100M也會滾動文件, 滾動文件將會壓縮成zip格式, 最多保留672個滾動文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/data/tomcat/error/error-%d{yyyy-MM-dd_HH}.%i.zip</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>672</maxHistory> </rollingPolicy> <encoder> <!-- 格式化輸出:%date(d%)表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度, -->
<!-- %logger{36}表示logger名字最長36個字符,否則按照句點分割,%msg:日志消息,%n是換行符
--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- SMTP server的地址,必需指定。如網易126的SMTP服務器地址是: smtp.126.com --> <property name="smtpHost" value="smtp.126.com"/> <!-- SMTP server的端口地址。默認值:25 --> <property name="smtpPort" value="25"/> <!-- 發送郵件賬號 --> <property name="username" value="********@126.com"/> <!-- 發送郵件密碼(此密碼為網易126郵箱的客戶端授權密碼,不是郵箱登錄密碼,126郵箱需要開啟POP3/SMTP服務、IMAP/SMTP服務才可使用) --> <property name="password" value="********"/> <!-- 如果設置為true,appender將會使用SSL連接到日志服務器。默認值:false --> <property name="SSL" value="false"/> <!-- 指定發送到那個郵箱,可設置多個<to>屬性,指定多個目的郵箱,收件人賬號多個可以逗號隔開 --> <property name="email_to" value="********@126.com"/> <!-- 指定發件人名稱。 --> <property name="email_from" value="********@126.com" /> <!-- 指定emial的標題,它需要滿足PatternLayout中的格式要求。如果設置成“Log: %logger - %msg”,就案例來講,則發送郵件時, -->
<!-- 標題為“【Error】: com.****.****Task - null.equals”。
--> <property name="email_subject" value="【Error】: %logger - %msg" /> <!-- 郵件發送的appender --> <appender name="Email" class="ch.qos.logback.classic.net.SMTPAppender"> <smtpHost>${smtpHost}</smtpHost> <smtpPort>${smtpPort}</smtpPort> <username>${username}</username> <password>${password}</password> <asynchronousSending>false</asynchronousSending> <SSL>${SSL}</SSL> <to>${email_to}</to> <from>${email_from}</from> <subject>${email_subject}</subject> <!-- html格式 --> <layout class="ch.qos.logback.classic.html.HTMLLayout"> <Pattern>%date%level%thread%logger{0}%line%message</Pattern> </layout> <!-- 這里采用等級過濾器,指定等級相符才發送,這里指定ERROR級別才發送 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <!-- 每個電子郵件只發送一個日志條目 --> <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker"> <bufferSize>1</bufferSize> </cyclicBufferTracker> </appender> <!-- 日志輸出,設置級別,指定appender --> <root level="DEBUG"> <appender-ref ref="Console"/> <appender-ref ref="RollingFileRun"/> <appender-ref ref="RollingFileError"/> <appender-ref ref="Email"/> </root> </configuration>

三、設置網易126郵箱

 

四、使用

logger.error("null.equals");

五、郵件截圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM