• Logback日志配置


    一、配置文件

     1.1 元素

            元素为配置文件根节点,包含的属性如下所示:

    • scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
    • scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
    • debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

    1.2 root节点

            root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。
            level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG。
            可以包含零个或多个元素,标识这个appender将会使用root设置的日志级别

    1. <root level="info">
    2. <appender-ref ref="CONSOLE"/>
    3. <appender-ref ref="FILE_INFO"/>
    4. <appender-ref ref="FILE_ERROR"/>
    5. root>

    1.3 property节点,变量设置

            Property 用来定义变量值的标签,有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量

    1. <property name="FILE_ERROR_PATTERN"
    2. value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} %file:%line: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    1.4 appender节点    

            appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略文件输出策略。控制台打印配置,用于开发环境,如下:

    1. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    2. <filter class="ch.qos.logback.classic.filter.LevelFilter">
    3. <level>INFOlevel>
    4. <onMatch>ACCEPTonMatch>
    5. <onMismatch>DENYonMismatch>
    6. filter>
    7. <encoder>
    8. <pattern>${CONSOLE_LOG_PATTERN}pattern>
    9. <charset>UTF-8charset>
    10. encoder>
    11. appender>

            除了控制台输出策略,最常用的是文件输出策略,如下所示:

    1. <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    2. <filter class="ch.qos.logback.classic.filter.LevelFilter">
    3. <level>ERRORlevel>
    4. <onMatch>DENYonMatch>
    5. <onMismatch>ACCEPTonMismatch>
    6. filter>
    7. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    8. <FileNamePattern>logs/${logFile}/info-%d{yyyy-MM-dd}.part_%i.logFileNamePattern>
    9. <maxHistory>90maxHistory>
    10. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    11. <maxFileSize>100MBmaxFileSize>
    12. timeBasedFileNamingAndTriggeringPolicy>
    13. rollingPolicy>
    14. <encoder>
    15. <pattern>${FILE_LOG_PATTERN}pattern>
    16. <charset>UTF-8charset>
    17. encoder>
    18. appender>

    1.4.1 元素

            filter中最重要的两个过滤器为:LevelFilter、ThresholdFilter

            LevelFilter 根据精确的级别匹配过滤事件。 如果事件的级别等于配置的级别,则筛选器接受或拒绝该事件,具体取决于onMatch和onMismatch属性的配置。 例如下面配置将只打印INFO级别的日志,其余的全部禁止打印输出:

    1. <filter class="ch.qos.logback.classic.filter.LevelFilter">
    2. <level>INFOlevel>
    3. <onMatch>ACCEPTonMatch>
    4. <onMismatch>DENYonMismatch>
    5. filter>

            ThresholdFilter 过滤低于指定阈值的事件。 对于等于或高于阈值的事件,ThresholdFilter将在调用其decision()方法时响应NEUTRAL。 但是,将拒绝级别低于阈值的事件,例如下面的配置将拒绝所有低于Error级别的日志,只输出Error以及以上级别的日志:
     

    1. <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    2. <level>Errorlevel>
    3. filter>

    1.4.2 RollingFileAppender

            RollingFileAppender,是FileAppender的一个子类,扩展了FileAppender,具有翻转日志文件的功能。 例如,RollingFileAppender 可以记录到名为log.txt文件的文件,并且一旦满足某个条件,就将其日志记录目标更改为另一个文件。

            有两个与RollingFileAppender交互的重要子组件。 第一个RollingFileAppender子组件,即 RollingPolicy 负责执行翻转所需的操作。 RollingFileAppender的第二个子组件,即 TriggeringPolicy 将确定是否以及何时发生翻转。 因此,RollingPolicy 负责什么和TriggeringPolicy 负责什么时候

            作为任何用途,RollingFileAppender 必须同时设置 RollingPolicy 和 TriggeringPolicy。 但是,如果其 RollingPolicy 也实现了TriggeringPolicy 接口,则只需要显式指定前者

    滚动策略如下:

    • TimeBasedRollingPolicy:可能是最受欢迎的滚动策略。 它根据时间定义翻转策略,例如按天或按月。 TimeBasedRollingPolicy承担滚动和触发所述翻转的责任。 实际上,TimeBasedTriggeringPolicy实现了RollingPolicy和TriggeringPolicy接口。
    • SizeAndTimeBasedRollingPolicy:有时您可能希望按日期归档文件,但同时限制每个日志文件的大小,特别是如果后处理工具对日志文件施加大小限制。 为了满足此要求,logback 提供了 SizeAndTimeBasedRollingPolicy ,它是TimeBasedRollingPolicy的一个子类,实现了基于时间和日志文件大小的翻滚策略。
    1. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    2. <FileNamePattern>logs/${File_Name}/info-%d{yyyy-MM-dd}.part_%i.logFileNamePattern>
    3. <maxHistory>90maxHistory>
    4. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    5. <maxFileSize>100MBmaxFileSize>
    6. timeBasedFileNamingAndTriggeringPolicy>
    7. rollingPolicy>

     1.5 元素

            encoder中最重要就是pattern属性,它负责控制输出日志的格式。

    其中:%d{yyyy-MM-dd HH:mm:ss.SSS}:日期

               %-5level:日志级别

               %highlight():颜色,info为蓝色,warn为浅红,error为加粗红,debug为黑色

               %thread:打印日志的线程

               %15.15():如果记录的线程字符长度小于15(第一个)则用空格在左侧补齐,如果字符长度大于15(第二个),则从开头开始截断多余的字符 

               %logger:日志输出的类名

               %-40.40():如果记录的logger字符长度小于40(第一个)则用空格在右侧补齐,如果字符长度大于40(第二个),则从开头开始截断多余的字符

               %cyan:颜色

               %msg:日志输出内容

               %n:换行符
     

    1.6 详细配置文件 

    1. "1.0" encoding="UTF-8"?>
    2. <configuration scan="false" scanPeriod="60 seconds" debug="false">
    3. <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    4. <property name="FILE_ERROR_PATTERN"
    5. value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} %file:%line: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    6. <define name="logFile" class="com.wyf.meterdataproduct.log.DefineLogDir"/>
    7. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    8. <filter class="ch.qos.logback.classic.filter.LevelFilter">
    9. <level>INFOlevel>
    10. <onMatch>ACCEPTonMatch>
    11. <onMismatch>DENYonMismatch>
    12. filter>
    13. <encoder>
    14. <pattern>${CONSOLE_LOG_PATTERN}pattern>
    15. <charset>UTF-8charset>
    16. encoder>
    17. appender>
    18. <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    19. <filter class="ch.qos.logback.classic.filter.LevelFilter">
    20. <level>ERRORlevel>
    21. <onMatch>DENYonMatch>
    22. <onMismatch>ACCEPTonMismatch>
    23. filter>
    24. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    25. <FileNamePattern>logs/${logFile}/info-%d{yyyy-MM-dd}.part_%i.logFileNamePattern>
    26. <maxHistory>90maxHistory>
    27. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    28. <maxFileSize>100MBmaxFileSize>
    29. timeBasedFileNamingAndTriggeringPolicy>
    30. rollingPolicy>
    31. <encoder>
    32. <pattern>${FILE_LOG_PATTERN}pattern>
    33. <charset>UTF-8charset>
    34. encoder>
    35. appender>
    36. <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    37. <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    38. <level>Errorlevel>
    39. filter>
    40. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    41. <FileNamePattern>logs/${logFile}/error-%d{yyyy-MM-dd}.part_%i.logFileNamePattern>
    42. <maxHistory>90maxHistory>
    43. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    44. <maxFileSize>100MBmaxFileSize>
    45. timeBasedFileNamingAndTriggeringPolicy>
    46. rollingPolicy>
    47. <encoder>
    48. <pattern>${FILE_ERROR_PATTERN}pattern>
    49. <charset>UTF-8charset>
    50. encoder>
    51. appender>
    52. <root level="info">
    53. <appender-ref ref="CONSOLE"/>
    54. <appender-ref ref="FILE_INFO"/>
    55. <appender-ref ref="FILE_ERROR"/>
    56. root>
    57. configuration>

    二、指定写入日志的文件

            有时,我们需要在写日志的时候,指定写入的路径,也就是将不同的日志写入不同的文件中,为了实现这样的需求,可以采用以下配置:

    1. "1.0" encoding="UTF-8"?>
    2. <configuration scan="false" scanPeriod="60 seconds" debug="false">
    3. <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    4. <property name="FILE_ERROR_PATTERN"
    5. value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} %file:%line: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    6. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    7. <filter class="ch.qos.logback.classic.filter.LevelFilter">
    8. <level>INFOlevel>
    9. <onMatch>ACCEPTonMatch>
    10. <onMismatch>DENYonMismatch>
    11. filter>
    12. <encoder>
    13. <pattern>${CONSOLE_LOG_PATTERN}pattern>
    14. <charset>UTF-8charset>
    15. encoder>
    16. appender>
    17. <appender name="FILE_INFO" class="ch.qos.logback.classic.sift.SiftingAppender">
    18. <discriminator>
    19. <key>File_Namekey>
    20. <defaultValue>AepConsumerServedefaultValue>
    21. discriminator>
    22. <sift>
    23. <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    24. <filter class="ch.qos.logback.classic.filter.LevelFilter">
    25. <level>ERRORlevel>
    26. <onMatch>DENYonMatch>
    27. <onMismatch>ACCEPTonMismatch>
    28. filter>
    29. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    30. <FileNamePattern>D:/logs/GuoXin/${File_Name}/info-%d{yyyy-MM-dd}.part_%i.logFileNamePattern>
    31. <maxHistory>90maxHistory>
    32. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    33. <maxFileSize>100MBmaxFileSize>
    34. timeBasedFileNamingAndTriggeringPolicy>
    35. rollingPolicy>
    36. <encoder>
    37. <pattern>${FILE_LOG_PATTERN}pattern>
    38. <charset>UTF-8charset>
    39. encoder>
    40. appender>
    41. sift>
    42. appender>
    43. <appender name="FILE_ERROR" class="ch.qos.logback.classic.sift.SiftingAppender">
    44. <discriminator>
    45. <key>File_Namekey>
    46. <defaultValue>AepConsumerServedefaultValue>
    47. discriminator>
    48. <sift>
    49. <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    50. <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    51. <level>Errorlevel>
    52. filter>
    53. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    54. <FileNamePattern>D:/logs/GuoXin/${File_Name}/error-%d{yyyy-MM-dd}.part_%i.logFileNamePattern>
    55. <maxHistory>90maxHistory>
    56. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    57. <maxFileSize>100MBmaxFileSize>
    58. timeBasedFileNamingAndTriggeringPolicy>
    59. rollingPolicy>
    60. <encoder>
    61. <pattern>${FILE_ERROR_PATTERN}pattern>
    62. <charset>UTF-8charset>
    63. encoder>
    64. appender>
    65. sift>
    66. appender>
    67. <root level="info">
    68. <appender-ref ref="CONSOLE"/>
    69. <appender-ref ref="FILE_INFO"/>
    70. <appender-ref ref="FILE_ERROR"/>
    71. root>
    72. configuration>

    对应的类:

    1. public class LogService {
    2. private Logger logger = LoggerFactory.getLogger(LogService.class);
    3. /**
    4. * 记录info日志
    5. */
    6. public void info(String fileName,String msg){
    7. MDC.put("File_Name", fileName);
    8. logger.info(msg);
    9. MDC.remove("File_Name");
    10. }
    11. /**
    12. * 记录error日志
    13. */
    14. public void error(String fileName,String msg){
    15. MDC.put("File_Name", fileName);
    16. logger.error(msg);
    17. MDC.remove("File_Name");
    18. }
    19. }

            这样,就可以实现在写日志的时候指定写入文件的路径,将日志写入到不同的文件中。但是,这种方式比较耗费性能,一般不建议采用。

  • 相关阅读:
    CAD圆锥齿轮画法
    Mac电脑idea中配置nodejs前端环境
    io多路复用之poll的详细执行过程
    c语言之字符串数组
    ES6中set、map、DOM classList的基础用法
    Linux删除空目录/非空目录和文件
    LeetCode - 300 最长递增子序列
    【跟小嘉学习JavaWeb开发】第二章 Java 程序设计概述
    人工智能:PyTorch深度学习框架介绍
    bootstrap系列-1.简单的Demo
  • 原文地址:https://blog.csdn.net/sssxlxwbwz/article/details/126508845