【经验总结】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文件中

相关推荐
paopaokaka_luck2 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
Yaml44 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~4 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616884 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
程序媛小果5 小时前
基于java+SpringBoot+Vue的旅游管理系统设计与实现
java·vue.js·spring boot
AskHarries8 小时前
Spring Boot集成Access DB实现数据导入和解析
java·spring boot·后端
2401_857622668 小时前
SpringBoot健身房管理:敏捷与自动化
spring boot·后端·自动化
程序员阿龙8 小时前
基于SpringBoot的医疗陪护系统设计与实现(源码+定制+开发)
java·spring boot·后端·医疗陪护管理平台·患者护理服务平台·医疗信息管理系统·患者陪护服务平台
前 方8 小时前
若依入门案例
java·spring boot·maven
阿华的代码王国8 小时前
【Spring】——SpringBoot项目创建
java·spring boot·后端·启动类·target文件