springboot集成logback日志通用logback.xml模板详解

一、配置文件

1、日志级别

trace<debug<info<warn<Error

2、默认打印info及其以上级别的日志,默认不打印debug日志

<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置文件每隔1分钟,就检查更新 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 定义参数常量,便于后面直接用${name}来获取value值 -->
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] %logger{50} - %msg%n"/>
    <!--<property name="log.filePath" value="${catalina.base}/logs/webapps"/>-->
    <property name="log.filePath" value="D:/logs/webapps"/>
    <property name="log.maxHistory" value="30"/>
 
    <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 过去使用layout,现在都推荐使用encoder
             作用一:将日志信息转换(格式化)为字符串
             作用二:然后写入到文件中-->
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
 
    <!-- ch.qos.logback.core.rolling.RollingFileAppender 文件日志输出到文件 -->
    <!-- 1.打印debug级别日志的设置 -->
    <appender name="debugAppender"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 例如当天,也就是今天是2020-2-10,那么在这天生成的日志文件路径为${log.filePath}/debug.log
             接着到了明天,也就是2019-2-11,这天生成的日志文件路径为${log.filePath}/debug.log,
             但昨天2020-2-10,生成的日志文件路径就变为${log.filePath}/debug/debug-2020-2-10.log.gz(压缩文件) -->
 
        <!-- 当天生成的日志文件的路径 -->
        <file>${log.filePath}/debug.log</file>
        <!-- 设置基于时间(每天)的滚动策略,也就是将日志内容按照日期来写入到相应的文件中-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 当天之前的每天生成的日志文件的路径 -->
            <fileNamePattern>${log.filePath}/debug/debug-%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 最大历史保存文件的数量,只保存最近30天的日志文件,超出的会被删除-->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <!-- 过去使用layout,现在都推荐使用encoder
             作用一:将日志信息转换(格式化)为字符串
             作用二:然后写入到文件中-->
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <!-- 过滤掉非debug级别的信息 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <!-- 作用是拒绝写入所有与<level>不匹配的日志信息,
            也就是非debug级别的日志信息都不会被写入到日志文件中 -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <!-- 2.打印info级别日志的设置 -->
    <appender name="infoAppender"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
 
        <!-- 当天生成的日志文件的路径 -->
        <file>${log.filePath}/info.log</file>
        <!-- 设置基于时间(每天)的滚动策略,也就是将日志内容按照日期来写入到相应的文件中-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 当天之前的每天生成的日志文件的路径 -->
            <fileNamePattern>${log.filePath}/info/info-%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 最大历史保存文件的数量,只保存最近30天的日志文件,超出的会被删除-->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <!-- 过去使用layout,现在都推荐使用encoder
             作用一:将日志信息转换(格式化)为字符串
             作用二:然后写入到文件中-->
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <!-- 过滤掉非info级别的信息 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <!-- 作用是拒绝写入所有与<level>不匹配的日志信息,
            也就是非info级别的日志信息都不会被写入到日志文件中 -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <!-- 3.打印error级别日志的设置 -->
    <appender name="errorAppender"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
 
        <!-- 当天生成的日志文件的路径 -->
        <file>${log.filePath}/error.log</file>
        <!-- 设置基于时间(每天)的滚动策略,也就是将日志内容按照日期来写入到相应的文件中-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 当天之前的每天生成的日志文件的路径 -->
            <fileNamePattern>${log.filePath}/error/error-%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 最大历史保存文件的数量,只保存最近30天的日志文件,超出的会被删除-->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <!-- 过去使用layout,现在都推荐使用encoder
             作用一:将日志信息转换(格式化)为字符串
             作用二:然后写入到文件中-->
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <!-- 过滤掉非error级别的信息 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <!-- 作用是拒绝写入所有与<level>不匹配的日志信息,
            也就是非error级别的日志信息都不会被写入到日志文件中 -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
 
    <!-- 监听com.paopaoedu.springboot包下所有类产生的日志信息
        不设置additivity属性,那么默认additivity = true,表示会继承父级(在这里它的父级只有root一个),
        也就是会将日志信息也输出在控制台,但级别会覆盖父级的级别,也就是在控制台会输出debug级别及以上的日志信息 -->
    <logger name="com.paopaoedu.springboot" level="debug">
        <!-- 表示按照debugAppender的设置去打印日志 -->
        <appender-ref ref="debugAppender"/>
        <!-- 表示按照infoAppender的设置去打印日志 -->
        <appender-ref ref="infoAppender"/>
        <!-- 表示按照errorAppender的设置去打印日志 -->
        <appender-ref ref="errorAppender"/>
    </logger>
 
    <!-- 也是一种<logger>,是所有<logger>的父级 -->
    <!-- 不设置additivity属性,或者设置additivity = true的<logger>,会继承root的子标签<appender-ref ref="console" />的设置,
        将它自己设置的level属性级别及以上的日志打印到控制台 -->
    <root level="info">
        <!-- 表示按照console的设置去输出日志到控制台 -->
        <appender-ref ref="console"/>
    </root>
</configuration>

一、日志表达式解析

1、格式如下

%d [%thread] %-5p [%c] [%F:%L] [trace=%X{X-B3-TraceId:-},span=%X{X-B3-SpanId:-},parent=%X{X-B3-ParentSpanId:-}] - %msg%n

线上打印案例:

2022-02-23 00:00:00,601 [qtp823405912-16] ERROR [com.pingan.policy.components.individual.repository.HaPolicyIndividualRepo] [HaPolicyIndividualRepo.java:2077] [trace=,span=,parent=] - hapolicyindividualrepo.individualinsuredextrainfo:{"iDcardValidateResult":"TRUE"},error:
	java.lang.NullPointerException: null

1、%d <=> 2022-02-23 00:00:00,601

2、[%thread] <=> [qtp823405912-16]

3、%-5p <=> ERROR

4、[%c] <=> [com.pingan.policy.components.individual.repository.HaPolicyIndividualRepo]

5、[%F:%L] <=> [HaPolicyIndividualRepo.java:2077]

6、[trace=%X{X-B3-TraceId:-},span=%X{X-B3-SpanId:-},parent=%X{X-B3-ParentSpanId:-}] <=>
[trace=,span=,parent=]

7、 -%msg%n <=> -hapolicyindividualrepo.individualinsuredextrainfo:{“iDcardValidateResult”:“TRUE”},error:

二、log日志丢失问题:链接

对Logback配置文件进行分析。发现同时使用了TimeBasedRollingPolicy和SizeBasedTriggeringPolicy。并且SizeBasedTriggerPolicy设置文件最大为100MB。
最终定位,就是错误日志太多,要超过文件大小,这个时候,log就会对error进行压缩,只显示具体error不显示是哪一行,哪一列导致的。

本文转载:https://blog.csdn.net/21aspnet/article/details/104253841

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值