Spring Boot logback日志配置


placeholder image
admin 发布于:2022-05-09 10:06:50
阅读:loading

在好几年前学习log4j的时代,专门整理了log4j的知识点,形成了所谓的《适用的log4j整理》(关键字搜一搜能找出来),本着知识点收集汇总整理的原则,特将本站使用到的logback知识点进行整理汇总分享给大家。

知识点细节

(1)检查文件变化时自动重新加载,包含自动加载的间隔时间,debug模式查看logback运行状态;

(2)导入jar自带的默认xml文件,包含控制台输出彩色日志等配置;

(3)使用property定义名称和参数值;

(4)使用springProfile标签与spring.profiles.active激活环境来进行对应的参数值的设置,支持从application.yml文件中获取参数配置

(5)自定义日志输出格式,支持控制台输出彩色日志,支持控制台输出代码类超链接点击跳转

(6)输出至控制台的配置:过滤日志级别、字符编码、输出格式;

(7)输出至磁盘文件的配置:文件路径、文件编码、滚动策略(按时间周期、按文件大小、日志文件保留天数)、日志级别筛选

(8)线程异步输出日志:队列大小;

(9)按文件个数压缩备份日志文件:文件名称、最小个数、最多个数;

(10)按天、按小时、按分钟输出日志文件;

(11)按package路径过滤日志输出级别、设置不追加写入主日志文件;

参考logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
configuration
    scan:当此属性为true时,文件发生变化将自动加载,默认为true
    scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟
    debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false
-->
<configuration scan="true" scanPeriod="3600000" debug="false">
    <!-- 导入自带默认文件,含彩色日志等 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <contextName>chendd-logback</contextName>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
    <!--开发环境:打印控制台-->
    <property name="log.console.level" value="All" />
    <springProfile name="dev">
        <!-- 可以从application.yml文件中获取配置参数 -->
        <!--<springProperty scope="context" name="log.path" source="log.path.dev"/>-->
        <property name="log.path" value="logs" />
        <property name="log.console.level" value="debug" />
    </springProfile>
    <springProfile name="test">
        <property name="log.path" value="../logs" />
        <property name="log.console.level" value="debug" />
    </springProfile>
    <springProfile name="prod">
        <property name="log.path" value="../logs" />
        <property name="log.console.level" value="info" />
    </springProfile>

    <!-- 彩色日志格式,由于存在语法高亮,故去掉了进程ID与线程名称等 -->
    <property name="CONSOLE_LOG_PATTERN" 
            value="%d %clr(${LOG_LEVEL_PATTERN:-%5p}) [%thread] %cyan(at %class.%method) \\(%file:%line\\) : %m%n"/>
    <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level \\(%logger{50}.%method:%line\\) - %msg%n"/>
    <property name="FILE_LOG_PATTERN_ONLY_CONTENT" value="%msg%n"/>

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

    <!-- 时间滚动输出 level为 INFO 日志 -->
    <appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/web/blog.root.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录,不按级别存储 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>${log.path}/web/blog.root-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>50MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <!-- 可按日志级别过滤 -->
        <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>-->
    </appender>

    <appender name="ASYNC_LOG_FILE" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>256</queueSize>
        <appender-ref ref="LOG_FILE"/>
    </appender>

    <appender name="THREAD_RESOURCE_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/web/log-access-thread.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN_ONLY_CONTENT}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!--按文件个数备份,未测试-->
        <!--<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">   
          <fileNamePattern>tests.%i.log.zip</fileNamePattern>   
          <minIndex>1</minIndex>   
          <maxIndex>3</maxIndex>   
        </rollingPolicy>-->

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>${log.path}/web/log-access-thread-%d{yyyy-MM-dd.HH.mm}.log</fileNamePattern>
            <!--日志文件保留时间,单位是分钟此处保留近10分钟的文件-->
            <!--<maxHistory>10</maxHistory>-->
        </rollingPolicy>
    </appender>

    <!--可按路径设置日志的输出级别,但此级别需要高于默认的root-level级别 -->
    <logger name="org.springframework" level="info" />
    <logger name="org.apache" level="info" />

    <logger name="cn.chendd.core.logger.resource" level="info">
        <appender-ref ref="THREAD_RESOURCE_LOG"/>
    </logger>

    <root level="${log.console.level}">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="ASYNC_LOG_FILE" />
    </root>


</configuration>


 点赞


 发表评论

当前回复:作者

 评论列表


留言区