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

一、方案

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

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

  1. logback不同业务的日志打印到不同文件

    logback不同业务的日志打印到不同文件    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mggwct/article/details/777 ...

  2. Spring按业务模块输出日志到不同的文件

    一.背景 在我们开发的过程中,可能存在如下情况: 1.有些时候我们需要调用第三方的接口,一般情况下,调用接口,我们都会记录请求的入参和响应的.如果我们自己系统的日志和第三方的日志混合到一个日志文件中, ...

  3. logback怎么写?分类输出日志到不同的文件

    此appender有顺序,最好不要乱调顺序,输出日志如下: drwxr-xr-x 2 root root 4096 Dec 3 00:00 2019-12-02drwxr-xr-x 2 root ro ...

  4. springboot集成log4j2 + logstash 异步输出日志

    一. spring boot 集成log4j2 1.maven引入jar包 <dependency> <groupId>org.springframework.boot< ...

  5. cocos2d-x 控制台输出日志

    在2dx中用CCLog输出日志,但是在vs的控制台中由于信息很多,很难发现.可以用下面方法,会重新启动一个黑色的控制台来输出日志 修改main.c文件,如下: #include "main. ...

  6. Log4j日志根据配置输出到多个自定义文件

    最近工作中遇到所有日志需要记录到一个文件,而错误的sql执行记录到另一个文件中,查询了一些资料搞定,记录下来.顺便吐槽下公司限制印象笔记的使用. ##log4j.rootLogger=INFO, CO ...

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

    1.为什么使用logback? ——在开发中不建议使用System.out因为大量的使用会增加资源的消耗.因为使用System.out是在当前线程执行的,写入文件也是写入完毕之后才继续执行下面的程序. ...

  8. springboot+logback日志输出企业实践(下)

    目录 1.引言 2. 输出 logback 状态数据 3. logback 异步输出日志 3.1 异步输出配置 3.2 异步输出原理 4. springboot 多环境下 logback 配置 5. ...

  9. springboot+logback日志输出企业实践(上)

    目录 1.引言 2.logback简介 3. springboot默认日志框架-logback 3.1 springboot示例工程搭建 3.2 日志输出与基本配置 3.2.1 日志默认输出 3.2. ...

随机推荐

  1. Nginx配置参数中文详细说明

    #定义Nginx运行的用户和用户组user www www;##nginx进程数,建议设置为等于CPU总核心数.worker_processes 8;##全局错误日志定义类型,[ debug | in ...

  2. HDU5050:Divided Land(大数的进制转化与GCD)

    题意:给定大数A和B,求gcd.所有数字都是二进制. 思路:先输入字符串,再转化为大数,然后用大数的gcd函数,最后转化为字符串输出. 利用字符串和大数转化的时候可以声明进制,就很舒服的完成了进制转化 ...

  3. 【Spring IoC】依赖注入DI(四)

    平常的Java开发中,程序员在某个类中需要依赖其它类的方法.通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想,即依赖类不由程 ...

  4. Machine Learning in Finance – Present and Future Applications

    https://emerj.com/ai-sector-overviews/machine-learning-in-finance/ Machine learning has had fruitful ...

  5. NOIP 2012 借教室

    洛谷 P1083 借教室 https://www.luogu.org/problem/P1083 JDOJ 1783: [NOIP2012]借教室 D2 T2 https://neooj.com/ol ...

  6. flutter环境配置window10

    第一步,配置git环境,这个作为前端的都是会的,如果你不会,去问度娘去 第二步,配置java的开发环境,这里建议下载jdk为1.8版本的,我最初使用的是如下图的jdk版本,后面和flutter版本不一 ...

  7. MacBook安装WIN7开机黑屏的解决办法

    同事的一台Macbook,全盘用diskgenius格式化为MBR分区,支持BIOS启动,安装ghost版本的WIN7,开机黑屏,看了网上的帖子没有用,插入启动盘按option键选择从优盘启动,用di ...

  8. Linux性能优化实战学习笔记:第三十一讲

    一.上节回顾 上一节,我们一起回顾了常见的文件系统和磁盘 I/O 性能指标,梳理了核心的 I/O 性能观测工具,最后还总结了快速分析 I/O 性能问题的思路. 虽然 I/O 的性能指标很多,相应的性能 ...

  9. hunter-冲刺合集

    冲刺合集 一·项目相关 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 hunter--冲刺集合 团队名称 hunter小组 作业目标 最终 ...

  10. 100教程-100jc.cn

    个人编程笔记网站(持续更新) http://100jc.cn