從高可用性方面考慮,大的平臺通常都會配置錯誤日誌發送郵件的功能,由於發送郵件比較慢,同步發郵件會影響用戶體驗,通常會配置成異步發日誌郵件。網上只有零散的一些文章配置,沒有一個完整的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