使用logback-spring.xml配置日志

    科技2026-04-04  8

    完整配置如下(后面逐一分析):

    logback-spring.xml

    <?xml version="1.0" encoding="UTF-8" ?> <configuration> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> <!-- %d{HH:mm:ss.SSS} 表示输出到毫秒的时间 %msg 日志文本 %n 换行 --> %d - %msg%n </pattern> </layout> </appender> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> <encoder> <pattern> %msg%n </pattern> </encoder> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路径--> <fileNamePattern>F:/project/sell/log/info.%d.log</fileNamePattern> </rollingPolicy> </appender> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <pattern> %msg%n </pattern> </encoder> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路径--> <fileNamePattern>F:/project/sell/log/error.%d.log</fileNamePattern> </rollingPolicy> </appender> <root level="info"> <appender-ref ref="consoleLog" /> <appender-ref ref="fileInfoLog" /> <appender-ref ref="fileErrorLog" /> </root> </configuration>

    首先解析第一部分consoleLog:

    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> <!-- %d{HH:mm:ss.SSS} 表示输出到毫秒的时间 %msg 日志文本 %n 换行 --> %d - %msg%n </pattern> </layout> </appender>

    要想这个配置起效果,就要启用这个appender,那么我们该如果启用这个appender呢?只需要如下配置即可

    后面的也相同,都是在这样配置启用,后面就不多提了

    <root level="info"> <appender-ref ref="consoleLog" /> <appender-ref ref="fileInfoLog" /> <appender-ref ref="fileErrorLog" /> </root>

    控制台的运行效果:

    现在我们解析第二部分fileInfoLog

    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> <encoder> <pattern> %msg%n </pattern> </encoder> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路径--> <fileNamePattern>F:/project/sell/log/info.%d.log</fileNamePattern> </rollingPolicy> </appender>

    最后是fileErrorLog

    跟上面的fileInfoLog大同小异,滚动策略都是一样的,只是改了一个后面的文件名称,改了过滤器的类

    上面用的是ch.qos.logback.classic.filter.LevelFilter这个类

    而这里用的是ch.qos.logback.classic.filter.ThresholdFilter这个类

    那有人会问了,这两个类有什么区别呢?

    ThresholdFilter这个类,是只输出指定级别的日志

    而LevelFilter这个类,要配合onMatch标签,如果该标签中是DENY则,说明拦截该标签级别,onMismatch标签是ACCEPT,则说明,没抓取到上面lever级别的日志,就accept,即放行.

    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <pattern> %msg%n </pattern> </encoder> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路径--> <fileNamePattern>F:/project/sell/log/error.%d.log</fileNamePattern> </rollingPolicy> </appender>

    最后纠错一下第二部分是有bug的

    如果只想要输出info级别的日志,像上面那样配置,是只过滤了error级别的日志信息,warn级别的日志并没有过滤掉,我这边做一下修改(后面发现的,现在做一下补充修改)

    ##fileInfoLog

    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern> %d - %msg%n </pattern> </encoder> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路径--> <fileNamePattern>F:/project/sell/log/info.%d.log</fileNamePattern> </rollingPolicy> </appender>

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YNY31LXQ-1602166332044)(C:\Users\Carlos\AppData\Roaming\Typora\typora-user-images\image-20201008215924077.png)]

    这样就可以了!!!

    最终版logback-spring.xml(bug修复):

    <?xml version="1.0" encoding="UTF-8" ?> <configuration> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> <!-- %d{HH:mm:ss.SSS} 表示输出到毫秒的时间 %msg 日志文本 %n 换行 --> %d - %msg%n </pattern> </layout> </appender> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern> %d - %msg%n </pattern> </encoder> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路径--> <fileNamePattern>F:/project/sell/log/info.%d.log</fileNamePattern> </rollingPolicy> </appender> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <pattern> %d - %msg%n </pattern> </encoder> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路径--> <fileNamePattern>F:/project/sell/log/error.%d.log</fileNamePattern> </rollingPolicy> </appender> <root level="info"> <appender-ref ref="consoleLog" /> <appender-ref ref="fileInfoLog" /> <appender-ref ref="fileErrorLog" /> </root> </configuration>
    Processed: 0.014, SQL: 9