logback总结

22 阅读1分钟

看完这个不会配置 logback ,请你吃瓜!之前在 日志?聊一聊slf4j吧 这篇文章中聊了下slf4j。本文也从实际 - 掘金 (juejin.cn)

参考:slf4j的no applicable action for [onMismatch]错误_no applicable action for on[mismatch]什么问题-CSDN博客

  • 配置一个文件打印多个级别日志

实际配置有效:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--    <springProperty scope="context" name="LOG_HOME" source="logs"/>-->
    <property name="LOG_HOME" value="logs"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 打印格式: 2024-08-17 15:04:22.196 INFO  com.pcitc.cf.demo.config.AuthenticationFilter[86] %msg%  -->
        <encoder>
            <pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} %-5level %logger{50} [%line] %msg%n</pattern>
        </encoder>
    </appender>

    <!--按照天数事例-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/fjshBackend.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
<!-- https://blog.csdn.net/atgeretg/article/details/79530047  打印info及以上基本+ERROR  ,只能配置LevelFilter -->
            <onMatch>ACCEPT</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder>
            <ImmediateFlush>false</ImmediateFlush>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别TraceIdInterceptor从左显示5个字符宽度, %logger{50}输出日志的类,50代表包名加类名的总长度限制, %msg:日志消息,%n是换行符-->
            <pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} %-5level %logger{50} [%file:%line] %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/fjshBackend.log.%d{yyyy-MM-dd-HH}</fileNamePattern>
            <!-- 保留文件个数=N,默认无限-->
            <MaxHistory>60</MaxHistory>
        </rollingPolicy>
    </appender>


    <appender name="fileError" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/fjshBackendError.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <ImmediateFlush>false</ImmediateFlush>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别TraceIdInterceptor从左显示5个字符宽度, %logger{50}输出日志的类,50代表包名加类名的总长度限制, %msg:日志消息,%n是换行符-->
            <pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} %-5level %logger{50} [%file:%line] %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/fjshBackendError.log.%d{yyyy-MM-dd-HH}</fileNamePattern>
            <!-- 保留文件个数=N,默认无限-->
            <MaxHistory>60</MaxHistory>
        </rollingPolicy>
    </appender>

    <appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>256</queueSize>
        <includeCallerData>false</includeCallerData>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="FILE"/>
    </appender>

    <logger name="org.hibernate.SQL" level="DEBUG" />
    <logger name="ch.qos.logback.core" level="ERROR" />
    <logger name="com.pcitc.cf" level="INFO" />

    <!--TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF-->
    <!--    <root level="ERROR">-->
    <!--    <root level="${log.level}">-->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="asyncFileAppender"/>
        <appender-ref ref="fileError"/>
    </root>
</configuration>