【经验总结】Springboot打印指定类的日志到指定文件中

原文地址:https://www.cnblogs.com/zeng1994/p/f9bff238b13a0bf8fb8bf88c41db7a34.html

以下内容已经过实践,勘误,总结

环境:Springboot2.5.2

公司有个项目,需要和几个第三方系统对接。这种项目,日志一定要记录详细,不然出了问题就是各种甩锅。虽然项目里面和第三方系统对接相关的业务记录的日志很详细,但是由于整个项目的日志都在一个文件中,排查问题时比较麻烦。因此希望可以把这些和第三方对接的日志生成在另外一个单独的文件。这也就是标题中的实现按业务输出日志到不同的文件,下面开始讲解具体的实现方案。

一、方案

复制代码
由于需要按业务生成不同的日志文件,看到按业务来区分,我的第一感觉就是业务其实是可以按包名来区分的。所以其实我们只要实现不同的包下面的日志输出到不同的文件,就能实现需求了。由于本人以前玩过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

默认日志级别为info,默认引用了上面定义的这个2个appender

(2)实战阶段

在resources目录下新建一个logback-spring.xml的文件

将logback的默认配置(base.xml)内容copy到我们的xml文件中,因为我们想保留它的默认配置

定义一个输出到文件的appender

定义一个logger,logger的name为需要单独生成文件的那个包的全包名

logger里面引用我们上面定义的appender

这里特别说明,自定义logger是属于局部配置,它的优先级高于全局配置(指root),可以理解为局部配置覆盖全局配置。

代码如下

复制代码
logback-spring.xml内容具体如下:
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--官方配置 start-->
    <!--保留官方配置,方便使用官方配置的特性,参考:spring-boot-2.1.0.RELEASE.jar!\org\springframework\boot\logging\logback\base.xml-->

    <!--<included>-->
        <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
        <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
        <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
        <include resource="org/springframework/boot/logging/logback/file-appender.xml"/>
        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE"/>
        </root>
    <!--</included>-->
    <!--官方配置 end-->

    <!--######自定义配置  start########-->

    <!-- 自定义配置__单独输出到一个日志文件中 -->

    <appender name="Biz_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <encoder>

            <pattern>${FILE_LOG_PATTERN}</pattern>

        </encoder>

        <file>${LOG_FILE}_BIZ.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">

            <fileNamePattern>${LOG_FILE}_BIZ.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>

            <maxFileSize>${LOG_FILE_MAX_SIZE:-10MB}</maxFileSize>

            <maxHistory>${LOG_FILE_MAX_HISTORY:-0}</maxHistory>

        </rollingPolicy>

    </appender>


    <!--指定包或者类的日志配置(这里是局部配置,它能覆盖全局配置)-->
    <!-- 自定义配置__配置业务日志输出至单独的日志文件中 -->

    <logger name="com.huicoo.forestry.resources.manager.ImportManager" additivity="false" level="debug">

        <!-- 引用自定义的appender -->

        <appender-ref ref="Biz_LOG"/>

        <!-- 这里也引用控制台appender,才能在控制台中看到我们的日志 -->

        <appender-ref ref="CONSOLE"/>

    </logger>

    <!--######自定义配置  end########-->
</configuration>

最终实现日志单独打印到指定的_biz.log文件中

相关推荐
笨蛋不要掉眼泪12 小时前
Spring Boot + RedisTemplate 数据结构的基础操作
java·数据结构·spring boot·redis·wpf
编程彩机12 小时前
互联网大厂Java面试:从分布式事务到微服务优化的技术场景解读
java·spring boot·redis·微服务·面试·kafka·分布式事务
Moshow郑锴13 小时前
Spring Boot Data API 与 Redis 集成:KPI/图表/表格查询的缓存优化方案
spring boot·redis·缓存
好好研究13 小时前
SpringBoot整合SpringMVC
xml·java·spring boot·后端·mvc
千寻技术帮13 小时前
10386_基于SpringBoot的外卖点餐管理系统
java·spring boot·vue·外卖点餐
曹轲恒13 小时前
SpringBoot整合SpringMVC(末)
java·spring boot·后端
小马爱打代码13 小时前
Spring Boot:邮件发送生产可落地方案
java·spring boot·后端
三水不滴13 小时前
SpringBoot+Caffeine+Redis实现多级缓存
spring boot·redis·笔记·缓存
计算机毕设指导614 小时前
基于微信小程序的智能停车场管理系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·intellij-idea
indexsunny14 小时前
互联网大厂Java面试实战:从Spring Boot到Kafka的技术与业务场景解析
java·spring boot·redis·面试·kafka·技术栈·microservices