logback日志配置详解 logback mdc配置 一、logback日志配置 二、logback mdc机制

一、logback日志配置

相关引用链接
https://blog.csdn.net/qq_42292373/article/details/101016812
https://www.cnblogs.com/zhlv/p/11196080.html

1.logback的简单介绍

logback是java的日志开源组件,是log4j创始人写的,性能比log4j要好,目前主要分为3个模块
logback-core:核心代码模块
logback-classic:log4j的一个改良版本,同时实现了slf4j的接口,这样你如果之后要切换其他日志组件也是一件很容易的事
logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

2.关于SLF4j的日志输出级别

在slf4j中,从小到大的日志级别依旧是trace、debug、info、warn、error。

TRACE:很低的日志级别,一般不会使用。
DEBUG:指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打印一些运行信息。
INFO:消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避免打印过多的日志。
WARN:表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一些提示。
ERROR:指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,如果不想输出太多的日志,可以使用这个级别。

3.logback配置详解
<?xml version="1.0" encoding="UTF-8"?>
<!--
scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration debug="true" scan="true" scanPeriod="1 seconds">
     <!--自定义log文件特殊字段标识-->
    <contextName>logback</contextName>
    <!--定义参数,后面可以通过${app.name}使用-->
    <property name="app.name" value="logback_test"/>
    <!--ConsoleAppender 用于在屏幕上输出日志-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--定义了一个过滤器,在LEVEL之下的日志输出不会被打印出来-->
        <!--这里定义了INFO,也就是控制台不会输出比INFO级别小的日志-->
        <!--还有一个ThresholdFilter,[浏览器访问链接](https://upload-images.jianshu.io/upload_images/2368134-a975c5c0ca0b13f5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--onMatch="ACCEPT" 表示匹配该级别及以上-->
            <!--onMatch="DENY" 表示不匹配该级别及以上-->
            <!--onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上-->
            <!--onMismatch="ACCEPT" 表示匹配该级别以下-->
            <!--onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的-->
            <!--onMismatch="DENY" 表示不匹配该级别以下的-->

            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- encoder 默认配置为PatternLayoutEncoder -->
        <!--定义控制台输出格式-->
        <encoder>
            <!--
            1.%d{yyyy-MM-dd HH:mm:ss.SSS}:输出固定的时间格式 
            2.%thread:输出线程名称
            3.%-5level :转换说明符%-5level意味着日志事件的级别应该保持为5个字符的宽度对齐 如:
            DEBUG [main]: Message 1 
            WARN  [main]: Message 2
            4.%logger{36}:在日志记录事件的原点输出日志记录器的名称(缩写算法将缩短记录器的名称)如:
            请打开浏览器访问---》》》(https://upload-images.jianshu.io/upload_images/2368134-4f9180c514fbd675.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
            5.%msg:输出的信息
            6.%n:换行
              -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}  %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--定义日志输出的路径-->
        <!--这里的scheduler.manager.server.home 没有在上面的配置中设定,所以会使用java启动时配置的值-->
        <!--比如通过 java -Dscheduler.manager.server.home=/path/to XXXX 配置该属性-->
        <file>${scheduler.manager.server.home}/logs/${app.name}.log</file>
        <!--定义日志滚动的策略-->
        <!--三种日志滚动策略:TimeBasedRollingPolicy,SizeAndTimeBasedRollingPolicy,FixedWindowRollingPolicy-->
        <!--1.TimeBasedRoolingPolicy 基于时间滚动策略:时间滚动策略可以基于时间滚动按时间生成日志-->
        <!--2.SizeAndTimeBasedRollingPolicy 基于大小和时间的滚动策略:这个策略出现的原因就是对时间滚动策略的一个补充,使其不仅按时间进行生成而且考虑到文件大小的原因,因为在基于时间的滚动策略生成的日志文件,只是对一段时间总的日志大小做了限定,但是没有对每个日志文件的大小做限定,这就会造成个别日志文件过大,后期传递,阅读困难的问题-->
        <!--3.FixedWindowRollingPolicy基于固定窗口的滚动策略:防止滚动测策略导致过多的日志文件出现。这个策略出现得配合triggeringPolicy,给一个什么时候日志滚动一次的控制-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--定义文件滚动时的文件名的格式-->
            <fileNamePattern>${scheduler.manager.server.home}/logs/${app.name}.%d{yyyy-MM-dd.HH}.log.gz
            </fileNamePattern>
            <!--60天的时间周期,日志量最大20GB-->
            <maxHistory>60</maxHistory>
            <!-- 该属性在 1.1.6版本后 才开始支持  超过限制将异步删除数据-->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <!--每个日志文件最大100MB-->
            <maxFileSize>100MB</maxFileSize>
        </triggeringPolicy>
        <!--定义输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

   

    <!--对于类路径以 com.example.logback 开头的Logger,输出级别设置为warn,并且只输出到控制台-->
    <!--这个logger没有指定appender,它会继承root节点中定义的那些appender-->
    <logger name="com.example.logback" level="warn"/>

    <!--通过 LoggerFactory.getLogger("mytest") 可以获取到这个logger-->
    <!--由于这个logger自动继承了root的appender,root中已经有stdout的appender了,自己这边又引入了stdout的appender-->
    <!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
    <!--additivity表示要不要使用rootLogger配置的appender进行输出-->
    <logger name="mytest" level="info" additivity="false">
        <appender-ref ref="stdout"/>
    </logger>
    
    <!--由于设置了 additivity="false" ,所以输出时不会使用rootLogger的appender-->
    <!--但是这个logger本身又没有配置appender,所以使用这个logger输出日志的话就不会输出到任何地方-->
    <logger name="mytest2" level="info" additivity="false"/>

 <!--root是默认的logger 这里设定输出级别是debug-->
    <root level="info">
        <!--定义了两个appender,日志会通过往这两个appender里面写-->
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </root>

</configuration>

二、logback mdc机制

相关引用链接
https://www.jianshu.com/p/0436d3a4c673

1. MDC 介绍:

MDC(Mapped Diagnostic Context,映射调试上下文),即将一些运行时的上下文数据通过logback打印出来,是 一种方便在多线程条件下记录日志的功能。和SiftingAppender一起,可以实现根据运行时的上下文数据,将日志保存到不同的文件中。
2.作用:增加日志的打印方法
(1)简单的打印数据demo




(2)用于filter获取数据demo



(3)web文件配置获取前端请求的数据内容
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章