"PATH" value="./log">    "STDOUT" class="ch.qos.logback.core.ConsoleAppender">                                %d{ss.SSS} %highlight(%-5level) %blue(%-30logger{30}:%-4line) %thread %green(%-18X{LOG_ID}) %msg%n                "TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">        ${PATH}/trace/trace.log        "ch.qos.logback.core.rolling.TimeBasedRollingPolicy">            ${PATH}/trace/trace.%d{yyyy-MM-dd}.%i.log            "ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">                10MB                                    true                        15                            %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n                "ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">        ${PATH}/error/error.log        "ch.qos.logback.core.rolling.TimeBasedRollingPolicy">            ${PATH}/error/error.%d{yyyy-MM-dd}.%i.log            "ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">                10MB                        true            15                            %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n                "ch.qos.logback.classic.filter.LevelFilter">            ERROR            ACCEPT            DENY                    "WlcLog" class="com.logback.wlcLogLogbackAppender">        "ch.qos.logback.classic.filter.LevelFilter">            ERROR            ACCEPT            DENY                    "ERROR">        "ERROR_FILE" />        "WlcLog" />        "TRACE">        "TRACE_FILE" />        "INFO">        "STDOUT" />    

当然由于:

判断了异常不为空时,想要进去判断,就需要在log输出日志时,要注入 Throwable。

如下:

必须用 log.error(“这是一个日志msg”, e)。

这样 :

ThrowableProxy throwableProxy = (ThrowableProxy) loggingEvent.getThrowableProxy();

throwableProxy 就不等于 null。

像 log.error(“这是一个日志msg”)。

throwableProxy 就等于 null。

这样自定义一个日志处理处理类 wlcLogLogbackAppender 就生效了。

你可以 wlcLogLogbackAppender 在里面你可以拿到日志信息,做一些自己想做的事情。比如我这边就是在里面发送邮件,当然你可以做任何事。

本文来源:www.lxlinux.net/11003.html,若引用不当,请联系修改。

-->

1.软文推荐

2.软文推荐

3.软文推荐

这篇是通过扩展 logback 的日志插件来处理 err 级别的日志异常信息来发送邮件的,通过这篇的学习,可以掌握如何扩展 logback 的日志类,来实现自己不可告人的目的。

系统异常了,上篇是通过在全局异常中通过调用发送邮件的处理器代码进行邮件的发送,总是觉得还不那么优雅。

这篇是通过扩展 logback 的日志插件来处理 err 级别的日志异常信息来发送邮件的。

通过这篇的学习,可以掌握如何扩展 logback 的日志类,来实现自己不可告人的目的。

下面直接上代码。

首先自定义一个日志处理处理类 wlcLogLogbackAppender。

import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.classic.spi.ThrowableProxy;
import ch.qos.logback.core.AppenderBase;
import com.handler.WlcAsyncHandler;
import com.utils.SpringContextUtil;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Objects;
/**
* 描述: 自定义日志处理类
* 时间: 2021-07-01 11:11  
* 作者:IT学习道场
*/
public class wlcLogLogbackAppender extends AppenderBase {
   @Override
   protected void append(LoggingEvent eventObject) {
       if(eventObject instanceof LoggingEvent){
           LoggingEvent loggingEvent = (LoggingEvent)eventObject;
           //拿到ThrowableProxy
           ThrowableProxy throwableProxy = (ThrowableProxy) loggingEvent.getThrowableProxy();
           if (Objects.nonNull(throwableProxy)) {
               //获取 throwable 顶级异常
               Throwable throwable = throwableProxy.getThrowable();
               //获取log的msg
               String formattedMessage = loggingEvent.getFormattedMessage();
               //获取请求request
               HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
                       .getRequestAttributes()).getRequest();
               //获取spring的spring.mail.enable属性值,下面的逻辑你也可以自己根据想法自己玩也行
               String mailEnableProperty = SpringContextUtil.getEnvironmentProperty("spring.mail.enable");
               mailEnableProperty = (mailEnableProperty == null) ? "false" : mailEnableProperty;
               boolean mailEnable = Boolean.valueOf(mailEnableProperty);
               if (mailEnable){
                   //获取邮件的处理类
                   WlcAsyncHandler emailHandler = SpringContextUtil.getBean(WlcAsyncHandler.class);
                   emailHandler.handle(formattedMessage, throwable, request);
               }
           }
       }
       super.doAppend(eventObject);
   }
}

自定义的日志处理类搞完了,剩下的就是在logback-spring.xml中配置下就行,配置级别是 error 级别。

"1.0" encoding="UTF-8"?>

   
   "PATH" value="./log">
   "STDOUT" class="ch.qos.logback.core.ConsoleAppender">
       
           
           %d{ss.SSS} %highlight(%-5level) %blue(%-30logger{30}:%-4line) %thread %green(%-18X{LOG_ID}) %msg%n
       
   
   "TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
       ${PATH}/trace/trace.log
       "ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           ${PATH}/trace/trace.%d{yyyy-MM-dd}.%i.log
           "ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               10MB
           
           
           true
           
           15
       
       
           %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n
       
   
   "ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
       ${PATH}/error/error.log
       "ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           ${PATH}/error/error.%d{yyyy-MM-dd}.%i.log
           "ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
               10MB
           
           true
           15
       
       
           %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n
       
       "ch.qos.logback.classic.filter.LevelFilter">
           ERROR
           ACCEPT
           DENY
       
   
   
   "WlcLog" class="com.logback.wlcLogLogbackAppender">
       "ch.qos.logback.classic.filter.LevelFilter">
           ERROR
           ACCEPT
           DENY
       
   
   
   "ERROR">
       "ERROR_FILE" />
       "WlcLog" />
   
   "TRACE">
       "TRACE_FILE" />
   
   "INFO">
       "STDOUT" />
   

当然由于:

判断了异常不为空时,想要进去判断,就需要在log输出日志时,要注入 Throwable。

如下:

必须用 log.error(“这是一个日志msg”, e)。

这样 :

ThrowableProxy throwableProxy = (ThrowableProxy) loggingEvent.getThrowableProxy();

throwableProxy 就不等于 null。

像 log.error(“这是一个日志msg”)。

throwableProxy 就等于 null。

这样自定义一个日志处理处理类 wlcLogLogbackAppender 就生效了。

你可以 wlcLogLogbackAppender 在里面你可以拿到日志信息,做一些自己想做的事情。比如我这边就是在里面发送邮件,当然你可以做任何事。

本文来源:www.lxlinux.net/11003.html,若引用不当,请联系修改。

相关文章 8

1

Linux常用命令—ftpshut命令 58秒前

Linux常用命令ftpshut主要用于在指定的时间关闭FTP服务器,下面良许教程网为大家分享一下Linux常用命令ftpshut命令具体使用方法。 ftpshut 在指...

3

详解Lua 中的三目运算符 4分钟前

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩...

4

linux时间修改命令(linux时间修改命令不允许) 7分钟前

目录:1、linux修改系统时间命令2、linux修改时间命令setdate(linux修改时间命令没权限)3、LINUX系统如何修改时间命令?linux修改系统时间命令...

5

详解Python注释 9分钟前

写代码注释是一件很重要的事情,如果你写的一段函数给别人调用那么往往都需要配上一些基本的注释。写好代码可以让别人容易阅读你的...

6

seo排名优化周到易速达(快速seo整站优化排行) 12分钟前

目录:1、SEO快速排名优化方法2、seo网站排名优化有什么方法3、seo网站排名优化有什么方法?4、排名seo优化5、SEO快速排名的最新方法?6、...

7

Linux tcpdump命令使用实例 14分钟前

tcpdump就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的头完全...

8

防范远程桌面协议(RDP)的安全威胁具体方法 17分钟前

由于RDP是一种非常流行的协议,攻击者一旦获取访问权限,就会使用其转移到其他系统,所以,RDP也成功吸引了攻击者的目光。 远程桌面协...