版权声明:本文为博主原创文章,转载需注明出处。 https://blog.csdn.net/david_pfw/article/details/85846351
从高可用性方面考虑,大的平台通常都会配置错误日志发送邮件的功能,由于发送邮件比较慢,同步发邮件会影响用户体验,通常会配置成异步发日志邮件。网上只有零散的一些文章配置,没有一个完整的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写的也比较详细,需要综合到一块看