• logback知识点


    一、依赖

    首先是maven项目,引入框架

     针对ssm项目

    1. <dependency>
    2. <groupId>ch.qos.logback</groupId>
    3. <artifactId>logback-core</artifactId>
    4. <version>1.1.11</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>ch.qos.logback</groupId>
    8. <artifactId>logback-classic</artifactId>
    9. <version>1.1.11</version>
    10. </dependency>

    针对springboot项目:不需要额外的导入框架

    1. <!--该依赖已经集成了logback-->
    2. <dependency>
    3. <groupId>org.springframework.boot</groupId>
    4. <artifactId>spring-boot-starter-web</artifactId>
    5. </dependency>

    二、运行方式:

    ssm项目:

    classpath下会默认寻找logback-test.xml、logback.xml 文件

    springboot项目:

    classpath会寻找ogback-test.groovy、logback-test.xml、logback.groovy 或者 logback.xml,如果都找不到的话,才会加载项目路径下的 logback-spring.xml

    三、配置结构图

    四、配置组件详解

    1、logger 日志记录器

      logger日志级别继承 ,如果日志记录请求的级别高于或等于记录器的有效级别,则该日志请求是有效的。日志级别按以下顺序排序: TRACE < DEBUG < INFO < WARN < ERROR。

         logger属性:

    • name:指定全限定包名

    • level:日志输出级别,如果没有配置,则参考上面的级别继承

    • additivity:默认为true。一个logger可以配置多个appender,logger输出的日志会输出到当前记录器绑定的appender和父级们logger(直到root logger)绑定的appender,可以设置additivity 属性为false,则logger输出的日志仅会输出到当前记录器绑定的appender如果additivity为true,会存在重复输出日志情况

    如果additivity为true,会存在重复输出日志情况。

    1. <logger name="org.springframework.web.servlet.DispatcherServlet" level="DEBUG" additivity="false">
    2. <appender-ref ref="stdout" />
    3. <appender-ref ref="normal" />
    4. </logger>
    5. <logger name="org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor" level="DEBUG" additivity="false">
    6. <appender-ref ref="stdout" />
    7. <appender-ref ref="normal" />
    8. </logger>
    9. <!-- mybatis日志打印的是mapper namespace -->
    10. <logger name="com.mvc.testdemo2" level="info" additivity="false">
    11. <appender-ref ref="stdout" />
    12. <appender-ref ref="normal" />
    13. </logger>

    2、appender  配置日志文件输出目的,
    常用的类有ConsoleAppender、FileAppender 、RollingFileAppender 

    1  子元素   

     1.1  file 文件地址 
     1.2  rollingPolicy 滚动行为
     1.2.1  rollingPolicy 常用的类有TimeBasedRollingPolicy、SizeAndTimeBasedRollingPolicy
         TimeBasedRollingPolicy :TimeBasedRollingPolicy是最受欢迎的滚动策略。它基于时间进行滚动,可以是按月或按天等。TimeBasedRollingPolicy承担滚动以及触发所述滚动的责任。它实现了rolling policy同时也实现了triggering policy。
    子元素:{

        fileNamePattern: 必选;它的值应包括文件名以及适当放置的%d转换说明符。所述 %d由指定的转换说明可包含日期和时间模式 java.text.SimpleDateFormat类。如果省略了日期和时间模式,则采用默认模式 yyyy-MM-dd;可以指定多个%d,但是只有一个主要的,其他的都要使用‘aux’标记,多个%d允许你组织对日志文件归类,例如按照年月分文件夹/var/log/%d{yyyy/MM, aux}/myapplication.%d{yyyy-MM-dd}.logmaxHistory:        设置存档文件保存时间,日志文件至少保存 15 天,因为有些异常具备以“周”为频次发生的特点。totalSizeCap:      控制归档文件的大小

    }

    1. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    2. <fileNamePattern>/home/demo/local/log/local.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
    3. <maxHistory>30</maxHistory>
    4. </rollingPolicy>

     SizeAndTimeBasedRollingPolicy : 支持按照时间拆分后,再按文件大小拆分:例如:

    1. <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    2. <file>mylog.txt</file>
    3. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    4. <!-- rollover daily -->
    5. <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
    6. <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
    7. <maxFileSize>100MB</maxFileSize>
    8. <maxHistory>60</maxHistory>
    9. <totalSizeCap>20GB</totalSizeCap>
    10. </rollingPolicy>
    11. <encoder>
    12. <pattern>%msg%n</pattern>
    13. </encoder>
    14. </appender>
    1.3  encoder 日志输出格式

    encoder负责转换事件为字节数组并将字节数组写入输出流中。PatternLayoutEncoder 是最常用的encoder,该类通过使用PatternLayout来格式化日志事件。我们可以直接配置PatternLayoutEncoder ,而不用配置PatternLayout,它默认使用PatternLayout进行格式输出

    PatternLayout:
      它将日志事件转换成字符串,但是可以自定义字符串通过调整PatternLayout的转换模式。

    PatternLayout的转换模式跟C语言的printf()函数紧密相关。
    常用的模式有:

      % d{pattern}: 日期

      % level 日志级别

      %thread 线程名称

      %class 全限定类名,日志请求记录所在的类

      %method 日志请求记录所在的方法

      %line 日志请求记录的行号

      %n 换行

      %logger{length} 输出日志logger记录器的名字,length指定输出名字长度,logback会智能缩写而不丢失语义。

      %msg 输出日志记录器记录的消息

    多个模式之间分隔符,在大多数情况下,文字需包含空格或其他分隔字符(’[’,’]’,’-’),这样就不会与转换词混淆

    例如:

    1. <encoder>
    2. <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
    3. </encoder>
    1.4  filter 对appender收到的日志进行过滤,只有满足Filter条件的日志才输出到日志文件

      对appender收到的日志调用decide方法进行过滤,只有满足Filter条件的日志才输出到日志文件,decide方法有三个返回值,DENYACCEPTNEUTRAL

      如果返回的值为DENY,则立即删除日志事件,而不咨询其余的筛选器;
      如果返回的值是NEUTRAL中性的,则查询列表中的下一个筛选器,如果没有其他筛选器可供查询,则日志事件将正常处理;
      如果返回值为ACCEPT,则会立即处理日志事件,跳过其余筛选器的调用。

    LevelFilter

    该过滤器对日志的级别过滤,如果事件日志级别等于配置的级别,过滤器接受或者拒绝该事件日志,依赖于onMatch 和 onMismatch属性

    1. <filter class="ch.qos.logback.classic.filter.LevelFilter">
    2. <level>ERROR</level>
    3. <onMatch>ACCEPT</onMatch>
    4. <onMismatch>DENY</onMismatch>
    5. </filter>
    1.5  triggeringPolicy 指定何时发送滚动   

    该triggering policy通过配置一个maxFileSize参数,当日志文件超过该阈值,会通知RollingFileAppender 触发日志翻滚。但一般triggering policy可以不用配置,TimeBasedRollingPolicy 已经完美集成了.

    2  appender   实现类

     2.1  RollingFileAppender 扩展了FileAppender,
    具有滚动更新日志文件的功能;例如,RollingFileAppender可以登录到一个名为log.txt的文件,一旦满足某个条件,就可以保存当前日志文件,并滚动输出到新的日志文件
    子元素:{

        append:如果为true,则追加到已存在的日志文件,否则截断现有文件,默认为true    file: 指定日志写入文件的名字。如果文件不存在,则创建包括父级目录。windows系统要避开“\”,正确例子可以指定为c:/temp/test.log或c:\\temp\\test.log    encoder:输出的格式    rollingPolicy: 指定RollingFileAppender发生滚动时的行为    triggeringPolicy:指定RollingFileAppender何时发生滚动过程

    }

    2.2  FileAppender
    子元素:{

        append:如果为true,则追加到已存在的日志文件,否则截断现有文件,默认为true    file: 指定日志写入文件的名字。如果文件不存在,则创建包括父级目录。windows系统要避开“\”,正确例子可以指定为D:/demo/local.log或D:\\demo\\local.log    encoder: 输出的格式

    }

     2.3    ConsoleAppender 写日志到标准输出流,可以配置target属性为system.out,也可以指定System.error,默认System.out
    1. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    2. <!--默认System.out,也可以指定System.error -->
    3. <target>System.out</target>
    4. <!-- encoders 默认类型ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
    5. <encoder>
    6. <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
    7. </encoder>
    8. </appender>

    appender例如:

    1. <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
    2. <!-- encoder 默认使用PatternLayoutEncoder -->
    3. <encoder>
    4. <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
    5. </encoder>
    6. </appender>
    7. <appender name="normal" class="ch.qos.logback.core.rolling.RollingFileAppender">
    8.       //文件地址
    9. <file>/home/demo/local/log/local.log.zip</file>
    10.       //  滚动行为
    11. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    12.         //文件名称
    13. <fileNamePattern>/home/demo/local/log/local.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
    14.         //最大历史
    15. <maxHistory>30</maxHistory>
    16. </rollingPolicy>
    17.     //输出格式
    18. <encoder>
    19. <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
    20. </encoder>
    21. </appender>
    22. <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
    23. <file>/home/demo/local/log/error.log</file>
    24. <filter class="ch.qos.logback.classic.filter.LevelFilter">
    25. <level>ERROR</level>
    26. <onMatch>ACCEPT</onMatch>
    27. <onMismatch>DENY</onMismatch>
    28. </filter>
    29. <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
    30. <fileNamePattern>/home/demo/local/log/error.%i.log</fileNamePattern>
    31. <minIndex>1</minIndex>
    32. <maxIndex>10</maxIndex>
    33. </rollingPolicy>
    34. <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    35. <maxFileSize>10MB</maxFileSize>
    36. </triggeringPolicy>
    37. <encoder>
    38. <pattern>%d [%thread] %-5level %logger{36} [%file : %line] - %msg%n</pattern>
    39. </encoder>
    40. </appender>

    3、root

  • 相关阅读:
    毫米波雷达在检测、分割、深度估计等多个方向的近期工作及简要介绍
    uni-app开发微信小程序时u-view自定义样式不生效
    【设计模式】设计模式
    Go语言知识查漏补缺|基本数据类型
    vue 功能:点击增加一项,点击减少一项
    Unity之ShaderGraph如何实现飘动的红旗
    HTML CSS JS 网页设计作业「我的家乡吉林」
    Vue3学习(二十二)- 保存文档内容
    JSP指令,JSP九大内置对象
    常用的语音芯片工作原理_分类为语音播报 语音识别 语音合成tts
  • 原文地址:https://blog.csdn.net/qq_39130650/article/details/126749954