SpringBoot+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
    • 默认日志级别为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 version="1.0" encoding="UTF-8"?>

<configuration>

    <!--官方配置 start-->
    <!--保留官方配置,方便使用官方配置的特性,参考:spring-boot-2.1.0.RELEASE.jar!\org\springframework\boot\logging\logback\base.xml-->
    <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>
    <!--官方配置 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.jwx.digital.client.haier.http" additivity="false" level="debug">
        <!-- 引用自定义的appender -->
        <appender-ref ref="Biz_LOG"/>
        <!-- 这里也引用控制台appender,才能在控制台中看到我们的日志 -->
        <appender-ref ref="CONSOLE"/>
    </logger>

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

</configuration>

1

<?xml version="1.0" encoding="UTF-8"?>

2


3

<configuration>

4


5

    <!--官方配置 start-->

6

    <!--保留官方配置,方便使用官方配置的特性,参考:spring-boot-2.1.0.RELEASE.jar!\org\springframework\boot\logging\logback\base.xml-->

7

    <include resource="org/springframework/boot/logging/logback/defaults.xml" />

8

    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>

9

    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />

10

    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />

11

    <root level="info">

12

        <appender-ref ref="CONSOLE" />

13

        <appender-ref ref="FILE" />

14

    </root>

15

    <!--官方配置 end-->

16


17

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

18

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

19

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

20

        <encoder>

21

            <pattern>${FILE_LOG_PATTERN}</pattern>

22

        </encoder>

23

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

24

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

25

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

26

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

27

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

28

        </rollingPolicy>

29

    </appender>

30


31

    <!--指定包或者类的日志配置(这里是局部配置,它能覆盖全局配置)-->

32

    <!-- 自定义配置__配置业务日志输出至单独的日志文件中 -->

33

    <logger name="com.jwx.digital.client.haier.http" additivity="false" level="debug">

34

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

35

        <appender-ref ref="Biz_LOG"/>

36

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

37

        <appender-ref ref="CONSOLE"/>

38

    </logger>

39

    

40

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

41


42

</configuration>

(3)验证阶段

项目的application.yml对日志做了如下配置

# 日志打印
logging:
    file: /log/digital-client.log  #日志输出到这个文件

1

# 日志打印

2

logging:

3

    file: /log/digital-client.log  #日志输出到这个文件

项目运行后,我们在digital-client.log的旁边发现了一个digital-client.log_BIZ.log的文件,而且文件里面的内容就是我们那个第三方对接的业务日志。

三、小结

(1)其实要实现这个功能有其他方案,但是根据当前项目的运行环境,以及代码的结构,这种修改日志配置的方式是最简单的

(2)通过这次的日志配置,学习了springboot日志logback的默认xml配置

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

时间: 2024-08-29 19:09:28

SpringBoot+logback实现按业务输出日志到不同的文件的相关文章

Log4j按级别输出日志到不同的文件

log4j.rootLogger=info,stdout,info,debug,error log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n log4j.logg

使用logback来输出日志

日志级别--level debug:调试,从名字可以看出其作用.程序中报错无法解决时,使用调试来查看更多错误信息.在mybatis中使用这种日志才会输出sql语句.debug的输出量太大,而且不懂源码的人很多都看不懂,还有很多没什么实际作用的日志信息刷屏,只适合报异常程序的调试. info:信息,信息量比debug少很多,只会输出一些重要的信息,适合开发时使用. warn:警告,通常是可以修复的,不修复也不一定会引发异常,有时候是一些提示信息,但是比info信息更加重要 error:错误,很明显

springboot的日志框架slf4j (使用logback输出日志以及使用)

1.为什么使用logback? --在开发中不建议使用System.out因为大量的使用会增加资源的消耗.因为使用System.out是在当前线程执行的,写入文件也是写入完毕之后才继续执行下面的程序.而使用Log工具不但可以控制日志是否输出,怎么输出,它的处理机制也是通知写日志,继续执行后面的代码不必等日志写完. --个人推荐使用SLF4J(Simple Logging Fa?ade For Java)的logback来输出日志,其比log4j效率高.     --Spring Boot 提供了

spring-boot logback日志常用配置解释

1)引入 spring-boot默认日志系统就是logback日志框架 spring-boot引入logback的maven依赖关系树如下: 2)配置 在application.properties文件中 #backlog setting logging.config=logback-spring.xml 或者在 application-dev.yml文件中 logging: config: classpath:logback-spring.xml logback-spring.xml配置详解

Spring Boot 使用 Log4j2 &amp; Logback 输出日志到 EKL

文章目录 1.ELK 介绍 2.环境.软件准备 3.ELK 环境搭建 4.Spring Boot 配置示例 4.1.Log4j2 方式配置 4.2.Logback 方式配置 1.ELK 介绍 ELK 是 Elasticsearch , Logstash, Kibana 的缩写,Elasticsearch 是开源分布式搜索引擎,提供搜集.分析.存储数据等功能,Logstash 主要是用来日志的搜集.分析.过滤日志的工具,Kibana 为 Elasticsearch 提供分析和可视化的 Web 平台

logback整合控制台sysout输出到日志文件

项目中有些地方日志打印是通过sysout的,但是之前logback的操作只能输出info,error这些内容,问题不大,下面的操作可以将控制台的输出打印到日志文件里面 (项目是基于springboot的) 引入相关依赖 <!-- https://mvnrepository.com/artifact/uk.org.lidalia/sysout-over-slf4j --> <dependency> <groupId>uk.org.lidalia</groupId&g

springboot输出日志到文件配置

新建logback-spring.xml,内容如下: <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds"> <property name="ENCODER_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS}

Logback 整合 RabbitMQ 实现统一日志输出

原文地址:Logback 整合 RabbitMQ 实现统一日志输出 博客地址:http://www.extlight.com 一.前言 公司项目做了集群实现请求分流,由于线上或多或少会出现请求失败或系统异常,为了查看失败请求的日志信息,我们得将所有服务的日志文件都打开来进行问题的定位分析,操作起来非常麻烦.因此,我们开发组决定设计一套日志查看系统来解决上述问题. 二.实现思路 默认的,应用服务日志信息会保存在本地服务器的目录中,为了方便查看日志我们应该把多台服务器日志统一输出到一个日志文件中.

第十章 springboot + logback

logback是boot默认的日志首选,个人觉得是最好的日志实现(比log4j好) 下边,在之前的代码基础上增加一个功能,该功能要实现mybatis的and or联查功能,并通过logback日志在控制台去查看输出的sql情况. 即实现如下sql的功能: SELECT * FROM tb_user WHERE id = ? AND (username=? OR `password`= ?); 该语句需要用到xml格式. 注意:由本节开始,springboot采用了1.3.0. 1.com.xxx