前言

 @SLF4J配置结构

  configuration:配置根目录

    conversionRule:彩色日志,配置之后控制台输出的日志信息是彩色的,非常好看

    appender:日志输出配置规则

      file:日志文件输出路径

      encoder:日志文件输出格式

        pattern:日志文件输出模板格式

        charset:日志文件输出编码方式

      rollingPolicy:日志记录器的滚动策略;简单来说就是一天过后把前一天的日志文件名变成 "2021-xx-xx.log";每个日志文件最大尺寸多少,超过尺寸后多余部分生成一个新的日志文件等,一些动态的策略处理

        fileNamePattern:滚动策略输出日志文件目录,及文件名模板;以尺寸策略来说,超过10m的文件,多余部分输出的文件名和路劲为appender的file值,已满10m的部分输出路径为此值

        timeBasedFileNamingAndTriggeringPolicy:设置日志文件尺寸滚动策略

          maxFilesSize:单个日志文件最大size

        maxHistory:日志文件最大保存时间

      filter:日志文件记录数据过滤器

        level:只记录对应等级的记录

        onMatch:常量:ACCEPT

        onMismatch:常量:DENY

    root:设置日志记录写入和控制器打印等级,低于这个等级的记录不写入日志文件,不在控制器打印

      appender-ref:日志规则生效列表,值为appender对应的name属性,只有name存在appender-ref的appender配置才会生效;

    logger:指定某个报下的日志输出规则,配置之后只要是这个包下产生的记录,都是遵循此规则,并且与root中配置的appender-ref重复的话,会叠加生效

      appender-ref:使用的日志生成规则

    springProfile:设置不同环境的配置,上诉标签除了configuration都可以放置在此标签内;会根据不同的环境,使用不同的规则

案例详解

  configuration

    配置文件的根节点

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds" debug="false">
    <conversionRule ....></conversionRule>
    <root ....></root>
    <appender ...></appender>
</configuration>

  conversionRule

    配置完彩色日志后,就可以在模板内使用彩色变量,使得输出的日志记录变成彩色的,稍后在pattern中举例使用彩色变量,现在先配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds" debug="false">

   ......一些其他的配置
   <!-- 彩色日志 -->
<!-- conversionWord:指定在pattern中使用的别名 -->
<!-- converterClass:指定使用彩色日志渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/> <!-- 彩色日志格式 --> </configuration>

  appender

    日志输出规则

 <!--输出到控制台-->
    <!--    name 表示规则名称,提供与root -> appender-ref 的使用-->
    <!--    class 表示使用的日志输出类 ConsoleAppender表示为控制台日志输出类,使用此类日志会输出的控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--        配置日志输出过滤条件-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--            只输出info等级及以上的日志-->
            <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
            <level>info</level>
        </filter>
        <!--        配置日志输出格式-->
        <encoder>
            <!--            日志输出格式模板,请注意一下格式是为了更好的描述,在打印的时候出现换行情况,实际使用要将其写成一行,换行符由%n代替-->
            <Pattern>
                ${
                CONSOLE_LOG_PATTERN:- //常量
                %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} //%clr表示使用conversionRule中conversionWord为clr的converterClass输出()中的变量文本;%d表示日期;{faint}表示颜色;颜色值有[faint:灰白,red,green,yellow,blue,magenta,cyan]
                %clr(${LOG_LEVEL_PATTERN:-%5p})
                %clr(${PID:- }){magenta}
                %clr(---){faint}
                %clr([%15.15t]){faint}
                %clr(%-40.40logger{39}){cyan}
                %clr(:){cyan}
                %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
                }
            </Pattern>
            <!-- 日志输出字符集,没错就是为了解决中文乱码-->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    Pattern中特殊符号含义

-X号: X信息输出时左对齐;
%p: //输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: //输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%r: //输出自应用启动到输出该log信息耗费的毫秒数
%c: //输出日志信息所属的类目,通常就是所在类的全名
%t: //输出产生该日志事件的线程名
%l: //输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)
%x: //输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: //输出一个”%”字符
%F: //输出日志消息产生时所在的文件名称
%L: //输出代码中的行号
%m://输出代码中指定的消息,产生的日志具体信息
%n: //输出一个回车换行符,Windows平台为”\r\n”,Unix平台为”\n”输出日志信息换行

    根据等级设置多个日志输出规则,把不同等级的日志分别存储,配置多个appender

   <!--    设置一个变量,以免Pattern重复复制模板表达式-->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>


    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>info</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>


    <!--输出到文件-->

    <!-- 时间滚动输出 level为 DEBUG 日志 -->
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_debug.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志归档 -->
            <fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录debug级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 时间滚动输出 level为 INFO 日志 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_info.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 时间滚动输出 level为 WARN 日志 -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_warn.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1KB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录warn级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <!-- 时间滚动输出 level为 ERROR 日志 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_error.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
View Code

相关文章:

  • 2022-01-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-08
  • 2021-10-28
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-23
  • 2021-10-27
  • 2022-12-23
  • 2021-09-20
  • 2022-01-18
相关资源
相似解决方案