springMVC配置log4j2.xml发送error日志邮件
先引入jar包
<dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>
log4j2.xml配置,放入 appenders 标签里面
<SMTP name="Mailer" subject="错误日志" to="" from="" smtpHost="smtp.qq.com" timeOut="1000" smtpDebug="false" smtpUsername="1030872042" smtpPassword="spcggsezcwdxbehh" bufferSize="1024"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> </SMTP> <Async name="AsyncMailer" > <AppenderRef ref="Mailer"/> </Async>
这里说下 smtpPassword不是你邮箱密码,
qq邮箱上方设置--》账户, 拉到下方,把什么IMAP POP3 管他是啥都开启, 然后生成授权码,就是smtpPassword的值
再在log4j2.xml 文件加上
<AppenderRef ref="AsyncMailer" level="ERROR"/> 这句
基本完事,注意:邮件只会发送log.error()输出的内容,而且邮箱的邮件 不是随便发的 有数量限制,比如每天上限,每分钟上限多少封,超了直接就报错,连接被拒绝,这么一限制感觉没啥意思了。这里引出来一个问题,比如我想警告的异常是那种我根本不知道的,未知的运行时异常,怎么办呢? 比如什么sql执行的异常,空指针什么的,我要是知道我也不会打印什么log.error啊 我直接处理了。这就扯出来 全局异常处理了,@RestControllerAdvice @ExceptionHandler直接我就再里面来了这么个方法,别说还真可以, 随便找个方法来个 1/0, 邮件到位。 但是总感觉不对,我不能啥异常都抓啊,还是得细分指定异常,而且我只想检测某个service,这怎么整?就想到一个东西@Aspect, 直接写个切面类,来个@AfterThrowing, 这玩意是不是比上面那个好用?
@AfterThrowing(throwing="ex", pointcut="execution(* pdream.demo.service.impl.*.*(..))") public void doRecoveryActions(Throwable ex) { System.out.println("目标方法中抛出的异常:" + ex); log.error("异常来了..."); }
还有个问题,怎么控制邮件频率, 不能频繁发,太频繁在一段时间内只要发邮件就会报错。
相关推荐
JudeJoo 2020-08-21
meleto 2020-08-15
玫瑰小妖 2020-07-18
dlutbob 2020-07-04
zmysna 2020-07-04
小鱿鱼 2020-06-26
MicroBoy 2020-06-17
zhongliwen 2020-06-13
zhongliwen 2020-06-13
qingjiuquan 2020-06-07
牧场SZShepherd 2020-06-03
zhangdy0 2020-05-31
spring艳 2020-05-30
方志朋 2020-05-30
咻pur慢 2020-05-27
牧场SZShepherd 2020-05-18
HappyHeng 2020-05-16
spring艳 2020-05-16