1. 程式人生 > >Maven專案之錯誤日誌發郵件通知

Maven專案之錯誤日誌發郵件通知

1、主要通過logback.xml配置,該檔案位於src/main/resource目錄下

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="false">

    <property name="fileName" value="xunming-scheduler"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"
>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"
>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>
logs\\${fileName}.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>365</maxHistory> </rollingPolicy> </appender> <!-- 郵件 --> <!-- SMTP server的地址,必需指定。如網易的SMTP伺服器地址是: smtp.163.com 、 smtp.126.com--> <property name="smtpHost" value="smtp.exmail.qq.com"/><!--填入要傳送郵件的smtp伺服器地址--> <!-- SMTP server的埠地址。預設值:25 --> <property name="smtpPort" value="25"/> <!-- 傳送郵件賬號,預設為null --> <property name="username" value="[email protected]"/><!--發件人賬號 [email protected]> <!-- 傳送郵件密碼,預設為null --> <property name="password" value="123456"/><!--發件人密碼 123456--> <!-- 如果設定為true,appender將會使用SSL連線到日誌伺服器。預設值:false --> <property name="SSL" value="false"/> <!-- 指定傳送到那個郵箱,可設定多個<to>屬性,指定多個目的郵箱 --> <property name="email_to" value="[email protected]"/><!--收件人賬號多個可以逗號隔開--> <!-- 指定發件人名稱。如果設定成“&lt;ADMIN&gt; ”,則郵件發件人將會是“<ADMIN> ” --> <property name="email_from" value="[email protected]" /> <!-- 指定emial的標題,它需要滿足PatternLayout中的格式要求。如果設定成“Log: %logger - %msg ”,就案例來講,則傳送郵件時,標題為“【Error】: com.foo.Bar - Hello World ”。 預設值:"%logger{20} - %m". --> <property name="email_subject" value="【Error】: %logger - %msg " /> <!-- ERROR郵件傳送 asynchronousSending配置屬性--> <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender"> <smtpHost>${smtpHost}</smtpHost> <smtpPort>${smtpPort}</smtpPort> <username>${username}</username> <password>${password}</password> <asynchronousSending>true</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>      <!-- 這裡採用等級過濾器 指定等級相符才傳送 --> <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> <!--<filter class="ch.qos.logback.classic.filter.ThresholdFilter">--> <!--<level>ERROR</level>--> <!--<onMatch>NEUTRAL</onMatch>--> <!--<onMismatch>NEUTRAL</onMismatch>--> <!--</filter>--> <!--<logger level="INFO" name="com.xmliu"/>--> <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE"/> <appender-ref ref="EMAIL"/> </root> </configuration>

2、pom.xml中新增如下依賴


        <dependency>
            <groupId>org.codehaus.janino</groupId>
            <artifactId>janino</artifactId>
            <version>2.7.8</version>
        </dependency>
        <!-- logback相關 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.1.7</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.7</version>
        </dependency>
        <!-- 發郵件 -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>
        <!-- logger.info("具體使用") -->
         <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

3、正常版使用方法

Logger logger = LoggerFactory.getLogger(XmScheduler.class);
public void doAnything(){
    logger.error("郵件傳送");
}

4、還有一種情況是根據指定的marker來發送郵件,那麼logback.xml需要新增如下配置

<!-- 基於標記的傳送郵件 如有多個標記加入多個<maker></maker>標籤即可 -->
        <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
            <marker>Wei</marker>
        </evaluator>

5、標記版使用方法

 logger.info(MarkerFactory.getMarker("Wei"),"具體郵件內容");

6、實測,正常版效果圖,標記版類似就不上圖了

這裡寫圖片描述

參考博文: