Logback实现按业务输出到对应日志文件

一、方案

由于需要按业务生成不同的日志文件,看到按业务来区分,我的第一感觉就是业务其实是可以按包名来区分的。所以其实我们只要实现不同的包下面的日志输出到不同的文件,就能实现需求了。由于本人以前玩过log4j2,要实现这个还是不难的,所以马上就有思路了。

具体的实现思路如下:

(1)自定义一个输出到文件的appender(理解为日志输出器)

(2)配置logger,logger的name为需要单独生成文件的那个包的全包名,然后在里面引用上面定义的appender

二、具体实现

(1)准备阶段

由于项目采用SpringBoot框架,而且使用的是默认日志框架logback。看了下官网,只需要在resources下面定义一个logback-spring.xml的XML文件就能覆盖默认的logback配置。

由于SpringBoot默认的日志配置还是挺不错的,因此想把默认的配置保留下来。通过查看springboot的jar包才找到默认的logback的xml配置。

它的位置为spring-boot-2.1.0.RELEASE.jar!\org\springframework\boot\logging\logback\base.xml,这个默认xml中有如下配置:

定义了2个appender,分别为输出到控制台的appender和输出到文件的appender
 "ztripLogAppender"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
    ${LOG_DIR}/ztrip.log
    <rollingPolicy
            class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      ${LOG_DIR}/ztrip.%d{yyyy-MM-dd}.log.bak
      

    
      ${COMMON_LOG_PATTERN}
    
  
"CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

        ${COMMON_LOG_PATTERN}

      UTF-8
默认日志级别为info,默认引用了上面定义的这个2个appender
"ztripLog" additivity="false" level="INFO">
    ref ref="ztripLogAppender"/>
    ref ref="CONSOLE"/>

(2)代码引用(2种方式)

1.通过lombok提供的注解,指定上面配置好的logger name
@Slf4j(topic = "ztripLog")
2.通过 LoggerFactory 去创建
private final static Logger ztripLogger = LoggerFactory.getLogger(ZtripConstants.ZTRIP_LOG_NAME);

(3)效果如下

三、最后

(1)需要考虑到你的线上代码已经运行了一段时间,那么改动日志尽量不要去动原来的,最好新增一个配置;因为你不清楚之前的开发到底是不是还有其他逻辑在上面,盲目的改动有风险

(2)通过不同业务的日志分离,既能解耦也能加快排查问题的速度,避免在大日志文件海选

感谢下面的文章给的思路,参考链接:

https://www.cnblogs.com/zeng1994/p/f9bff238b13a0bf8fb8bf88c41db7a34.html

Original: https://www.cnblogs.com/zdd-java/p/15638198.html
Author: 达兔哥
Title: Logback实现按业务输出到对应日志文件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/576116/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球