1. 程式人生 > >log4j2非同步傳送郵件配置

log4j2非同步傳送郵件配置

從高可用性方面考慮,大的平臺通常都會配置錯誤日誌傳送郵件的功能,由於傳送郵件比較慢,同步發郵件會影響使用者體驗,通常會配置成非同步發日誌郵件。網上只有零散的一些文章配置,沒有一個完整的log4j2非同步發郵件的配置說明,下面就詳細說明一下 - log4j2非同步傳送郵件的詳細配置

1. 環境說明

是基於 spring boot 專案做的配置,不過這跟log4j2的發郵件配置關係不是很大

2. 配置步驟:

2.1. 新增依賴

有的文章說要引用這些包,但是我spring boot的專案沒引入也可以正常發郵件,估計spring boot本身就有這些包吧,大家看自己情況

<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.5.4</version>
</dependency>

2.2. 配置log4j2.xml

<appenders>
        <!--1. 設定SMTPAppender屬性-->
        <smtp name="Mail" subject="Error Log" to="[email protected],[email protected]" from="[email protected]" 
        	  replyTo="[email protected]" smtpHost="smtp.exmail.qq.com"  smtpDebug="false" smtpProtocol="smtps" 
        	  smtpUsername="
[email protected]
" smtpPassword="******" smtpPort="465" bufferSize="1024"> <!--定義error級別日誌才發--> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> </smtp> <!--2. 定義非同步發通知郵件AsyncAppender屬性--> <Async name="AsyncMail"> <appender-ref ref="Mail"/> </Async> </appenders> <loggers> <root level="info"> <appender-ref ref="Console"/> <appender-ref ref="RollingFileInfo"/> <appender-ref ref="RollingFileError"/> <appender-ref ref="log"/> <!--3. 在root裡面呼叫AsyncAppender配置--> <appender-ref ref="AsyncMail"/> </root> </loggers>

這樣配置完已經可以非同步發郵件了,而且是隻有在產生error級別日誌才發,所有類都能監控到。

有圖有真相,這是效果圖,還是挺爽的,O(∩_∩)O哈哈~

下面補充說明一下相應關鍵配置。

3. 補充說明

3.1. SMTP配置說明

特別說明:

smtpProtocol, 預設為smtp,但是如果用的是企業郵箱(如騰訊企業郵箱),通常是要使用smtps的,否則連不上smtp.exmail.qq.com 465

 

3.2. 參照:

1. 官網說明:https://logging.apache.org/log4j/2.x/manual/appenders.html

log4j2有很多擴充套件工具類,非同步發郵件主要看兩塊:

①. SMTPAppender : 郵件傳送擴充套件類

②. AsyncAppender  :  非同步操作擴充套件類

2. 這兩篇blog寫的也比較詳細,需要綜合到一塊看

https://blog.csdn.net/u011277123/article/details/70899290

https://blog.csdn.net/Maskkiss/article/details/82013137