Administrator
Published on 2024-11-26 / 62 Visits
3
1

springboot的logback.xml配置

对于springboot项目,在resources中新建logback.xml或logback-spring.xml文件,将以下代码复制进去,根据需求稍作修改或删除即可。

<?xml version="1.0" encoding="UTF-8" ?>
<!--内容借鉴:https://blog.csdn.net/anyeyeyeyeye/article/details/132598358-->
<!--文件命名为logback.xml或logback-spring.xml,建议logback-spring.xml-->

<!--
属性	            可选值	                                              说明            	                                             备注
scan	        true|false	                                          开启扫描,配置变更时logback自动更新配置	                             默认空,即false
scanPeriod	    30 (|milli(second)?|second(e)?|minute|hour|day)s?	  扫描间隔: 数字 + 空格 + 日期单位	                                 默认一分钟,若不指定时间单位,默认毫秒
debug	        true|false	                                          注册OnConsoleStatusListener的简写模式,控制台输出logback内部日志	 默认false
packagingData	true|false	                                          每行日志都输出包信息其所在jar包信息	                                 对性能影响较大,1.1.4及以上版本默认false
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false" packingData="false">

    <!--
    在配置文件中配置:
    #单个日志最大大小
    size_max=500MB
    #日志保存天数
    days_max=365
    -->
    <!--    <springProperty name="size_max" source="size_max"/>-->
    <!--    <springProperty name="days_max" source="days_max"/>-->

    <!--
    变量定义:低版本可以通过<property> 来定义,1.0.7版本后可以通过<variable>等同于<property>,二者一样
    使用: ${变量名}
    指定默认值:以:- 分隔 ${name:-value}
    使用下面方式可以不使用在上面配置文件中配置,二选一
    -->
    <!-- windows 日志存储目录-->
    <property name="logback.logDir" value=".\logs"/>
    <!--linux 日志存储目录-->
    <!--<property name="logback.logDir" value="${user.dir}/../logs"/>-->
    <!--单个日志文件最大大小-->
    <property name="size_max" value="500MB"/>
    <!--日志保存天数-->
    <property name="days_max" value="50"/>
    <!--字符集-->
    <property name="charset" value="UTF-8"/>
    <!--日志最大容量-->
    <property name="totalSizeCap" value="1GB"/>
    <!-- 分隔符 -->
    <!--<property name="separator" value="‖"/>-->
    <!-- 设置日志格式,由于默认配置使log文件出现空格乱码现象,在此文件log使用CONSOLE_LOG_PATTERN_FILES配置方式 -->
    <!--<property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS}${separator}%-5level${separator}${serverName}${separator}${PID}${separator}${HOSTNAME}${separator}%X{requestId}${separator}%-25logger{20}${separator}%-4line${separator}%msg%n"/>-->
    <property name="CONSOLE_LOG_PATTERN_FILES" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    <!-- 引入spring-boot默认的logback配置文件,通过引入的方式,获取原生控制台的日志颜色 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <!--控制台输出日志设置-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--encoder:指定输出日志格式化和字符集-->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>${charset}</charset>
        </encoder>
    </appender>

    <!--输出到日志滚动文件-->
    <!--FileAppender将日志事件追加到指定日志文件中-->
    <!--使用RollingFileAppender,继承继承自FileAppender,支持日志分片和历史日志的自动删除-->
    <!--
    RollingFileAppender执行流程:
        1、日志始终追加写入指定的日志文件中,若文件不存在则自动创建
        2、按rollingPolicy配置的策略,当满足策略时,自动将file重命名为rollingPolicy中指定的归档日志文件名,生成历史归档日志,如 /temp/test.2023-04-12.log,并对归档日志进行压缩 和 过期日志删除。
        3、循环 1-2
    -->
    <!--所有级别日志单独存储一份    -->
    <appender name="logback" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <!--日志文件的路径-->
        <File>${logback.logDir}/logback.log</File>

        <!--append:true | false,是否以追加的方式写到日志文件,默认true-->
        <append>true</append>

        <!--encoder:指定输出日志格式化和字符集-->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN_FILES}</pattern>
            <charset>${charset}</charset>
        </encoder>

        <!--prudent:安全模式,性能较差,一般不开启,默认false-->
        <prudent>false</prudent>

        <!--滚动(归档)策略, TimeBasedRollingPolicy:按照时间滚动(归档),超出指定时间范围的日志自动删除;
                            SizeAndTimeBasedRollingPolicy:按时间和文件大小滚动(归档)
        -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中-->
            <FileNamePattern>${logback.logDir}/arch/logback/logback.%d{yyyy-MM-dd}.%i.log</FileNamePattern>

            <!--日志保留时长(天)-->
            <maxHistory>${days_max}</maxHistory>

            <!--单个日志文件最大容量-->
            <maxFileSize>${size_max}</maxFileSize>

            <!--maxHistory内日志最大容量,到了这个值,就会删除旧的日志-->
<!--            <totalSizeCap>${totalSizeCap}</totalSizeCap>-->

            <!--cleanHistoryOnStart:项目启动时是否清理归档日志,默认false-->
            <cleanHistoryOnStart>false</cleanHistoryOnStart>
        </rollingPolicy>

    </appender>

    <!--将info日志单独存储一份    -->
    <appender name="infoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">java
        <!--过滤器,过滤满足条件或者不满足条件的日志
            LevelFilter:级别过滤器,匹配指定的日志级别
            ThresholdFilter:阈值过滤器,匹配等于或高于指定级别的日志
        -->

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
            如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
            的日志改名为今天的日期。即,<File> 的日志都是当天的。
        -->
        <File>${logback.logDir}/info.log</File>
        <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
            <FileNamePattern>${logback.logDir}/arch/info/info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!-- 单个日志文件最多 100MB -->
            <maxFileSize>${size_max}</maxFileSize>
            <!--只保留最近30天的日志-->
            <maxHistory>${days_max}</maxHistory>
            <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
            <!--<totalSizeCap>${totalSizeCap}</totalSizeCap>-->
        </rollingPolicy>
        <!--日志输出编码格式化-->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN_FILES}</pattern>
            <charset>${charset}</charset>
        </encoder>
    </appender>

    <!--将warn日志单独存储一份    -->
    <appender name="warnLog" class="ch.qos.logback.core.rolling.RollingFileAppender">java
        <!--过滤器,过滤满足条件或者不满足条件的日志
            LevelFilter:级别过滤器,匹配指定的日志级别
            ThresholdFilter:阈值过滤器,匹配等于或高于指定级别的日志
        -->

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>WARN</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
            如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
            的日志改名为今天的日期。即,<File> 的日志都是当天的。
        -->
        <File>${logback.logDir}/warn.log</File>
        <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
            <FileNamePattern>${logback.logDir}/arch/warn/warn.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!-- 单个日志文件最多 100MB -->
            <maxFileSize>${size_max}</maxFileSize>
            <!--只保留最近30天的日志-->
            <maxHistory>${days_max}</maxHistory>
            <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
            <!--<totalSizeCap>${totalSizeCap}</totalSizeCap>-->
        </rollingPolicy>
        <!--日志输出编码格式化-->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN_FILES}</pattern>
            <charset>${charset}</charset>
        </encoder>
    </appender>

    <!--将error日志单独存储一份    -->
    <appender name="errorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">java
        <!--过滤器,过滤满足条件或者不满足条件的日志
            LevelFilter:级别过滤器,匹配指定的日志级别
            ThresholdFilter:阈值过滤器,匹配等于或高于指定级别的日志
        -->

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则
            如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天
            的日志改名为今天的日期。即,<File> 的日志都是当天的。
        -->
        <File>${logback.logDir}/error.log</File>
        <!--滚动策略,按照时间滚动 TimeBasedRollingPolicy-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间-->
            <FileNamePattern>${logback.logDir}/arch/error/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!-- 单个日志文件最多 100MB -->
            <maxFileSize>${size_max}</maxFileSize>
            <!--只保留最近30天的日志-->
            <maxHistory>${days_max}</maxHistory>
            <!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志-->
            <!--<totalSizeCap>${totalSizeCap}</totalSizeCap>-->
        </rollingPolicy>
        <!--日志输出编码格式化-->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN_FILES}</pattern>
            <charset>${charset}</charset>
        </encoder>
    </appender>

    <!--使用<logger>标签指定com.sw.controller包内的日志在控制台输出的级别为warn-->
    <!--配置additivity="false",否则<root>中也配置了<appender-ref ref="console"/>,会重复输出日志。-->
<!--    <logger name="com.sw.controller" level="warn" additivity="false">-->
<!--        <appender-ref ref="console"/>-->

<!--    </logger>-->

    <!--建议在<root>中引用所有<appender>-->
    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="logback"/>
        <appender-ref ref="infoLog"/>
        <appender-ref ref="warnLog"/>
        <appender-ref ref="errorLog"/>
    </root>

</configuration>

 撰文参考:https://blog.csdn.net/anyeyeyeyeye/article/details/132598358


Comment