SpringBoot2 LogBack

从上图可以看到SpringBoot内部集成了LogBack日志依赖,

SpringBoot默认使用LogBack记录日志信息,默认根据base.xml配置内容来输出到控制台和文件之中,

所以无需要单独引用其他依赖。

再不配置logback相关配置的情况下,会默认加载base.xml,一样可以输出日志

但是每个项目对日志输出及保存都有不同的要求,所以根据不同要求配置不同的日志输出格式,以及保存方式

一 . 在配置文件中指定加载的logback的XML

     

二 . 配置自己的日志配置XML(重点

日志的输出级别(高到低):ERROR > WARN > INFO > DEBUG > TRACE

configuration:根节点

  • debug:是否打印logback日志信息
  • scan:配置xml发生改变时是否重新加载
  • scanPeriod:检测配置发生改变时间间隔

    contextName:设置日志上下文名称,%contextName打印上下文名称,分布式系统可以区分日志来源

    property:日志上下文变量key-value,可以通过${key}获取value值

    appender :日志输出组件,主要负责日志输出及格式化日志,常用于控制台日志输出(ConsoleAppender),日志文件滚动策                          略输出(RollingFileAppender)

  • name:appender组件的名称,后面给logger指定appender使用
  • class:常用的有 ConsoleAppender、RollingFileAppender           

   root:顶级logger节点,系统日志记录器,找不到对应logger几点,默认使用root节点

  • level:设置打印级别

   logger:自定义输出日志记录器,用于指定某个包或类的打印级别

  • name:指定某一个包或者某一个类日志打印级别
  • level:设置打印级别,与大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值                             INHERITED或者同义词NULL,代表强制执行上级的级别   
  • addtivity:是否向上一级logger传递打印信息

  

<?xml version="1.0" encoding="UTF-8"?>
<!--scan:是否检测文件变化,debug:是否打印logback日志信息,scanPeriod多久检查一次x-->
<configuration scan="true" debug="false" scanPeriod="10 seconds">
    <!--设置上下文名字,默认default,分布式系统进行日志收集时可以用来区分不同服务的日志 %contextName获取 -->
    <contextName>hxz_system</contextName>
    <!--设置日志输出位置变量:LOG_NAME,通过${LOG_NAME}获取 -->
    <property name="LOG_NAME" value="D:/logs"></property>
    <!-- 彩色日志依赖的渲染类 -->
    <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" />
    <!-- 彩色日志格式:CONSOLE_LOG_PATTERN,通过${CONSOLE_LOG_PATTERN}获取  -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss}) %clr(${LOG_LEVEL_PATTERN:-%p}) %clr(%c){cyan}  %clr(:){faint}%msg%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
    <!--设置控制台日志打印彩色日志配置-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--设置日志输出文件配置-->
    <appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <File>${LOG_NAME}/info.log</File>
        <!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
        <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--定义了日志的切分方式——把每分钟的日志归档到一个文件中。-->
            <fileNamePattern>${LOG_NAME}/info-%d{yyyy-MM-dd_HH-mm}.log</fileNamePattern>
            <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
            <maxHistory>30</maxHistory>
            <!--用来指定日志文件的上限大小,到了这个值,就会删除旧的日志。-->
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <!-- pattern节点,用来设置日志的输入格式 -->
            <pattern>
                <!--格式化输出:%d表示日期,%p日志级别 %c类全名 %msg:日志消息,%n是换行符-->
                <pattern>%contextName %d{yyyy-MM-dd HH:mm:ss} %p %c 【 %msg 】  %n</pattern>
            </pattern>
            <!-- 记录日志的编码:此处设置字符集 - -->
            <charset>UTF-8</charset>
        </encoder>
        <!-- 过滤日志纸打印INFO -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level><!--日志级别-->
            <onMatch>ACCEPT</onMatch><!--onMatch:符合过滤条件-->
            <onMismatch>DENY</onMismatch><!--onMismatch:不符合过滤条件-->
            <!--ACCEPT:立即执行不在经过剩余过滤去,DENY:丢弃不在经过剩余过滤器-->
        </filter>
    </appender>

    <appender name="ERROR_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <File>${LOG_NAME}/error.log</File>
        <!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
        <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天切割日志-->
            <fileNamePattern>${LOG_NAME}/error-%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <!-- pattern节点,用来设置日志的输入格式 -->
            <pattern>
                <!--格式化输出:%d表示日期,%p日志级别 %c类全名 %msg:日志消息,%n是换行符-->
                <pattern>%contextName %d{yyyy-MM-dd HH:mm:ss} %p %c 【 %msg 】  %n</pattern>
            </pattern>
            <!-- 记录日志的编码:此处设置字符集 - -->
            <charset>UTF-8</charset>
        </encoder>
        <!-- 过滤日志纸打印INFO -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level><!--日志级别-->
            <onMatch>ACCEPT</onMatch><!--onMatch:符合过滤条件-->
            <onMismatch>DENY</onMismatch><!--onMismatch:不符合过滤条件-->
            <!--ACCEPT:立即执行不在经过剩余过滤去,DENY:丢弃不在经过剩余过滤器-->
        </filter>
    </appender>

    <logger name="com.huaxiaozhou.Controller">
        <appender-ref ref="INFO_LOG" />
        <appender-ref ref="ERROR_LOG" />
    </logger>

    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>

</configuration>
发布了38 篇原创文章 · 获赞 1 · 访问量 1062

猜你喜欢

转载自blog.csdn.net/yu13843271857/article/details/98800675