springMVC配置log4j2.xml发送error日志邮件

mxcsdn 2020-05-27

先引入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的值

springMVC配置log4j2.xml发送error日志邮件

再在log4j2.xml 文件加上   

<AppenderRef ref="AsyncMailer" level="ERROR"/>  这句

springMVC配置log4j2.xml发送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("异常来了...");
    }

还有个问题,怎么控制邮件频率, 不能频繁发,太频繁在一段时间内只要发邮件就会报错。

 

相关推荐