%d - %msg%n
ERROR
DENY
ACCEPT
%msg%n
F:/project/sell/log/info.%d.log
ERROR
%msg%n
F:/project/sell/log/error.%d.log
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d - %msg%n
pattern>
layout>
appender>
后面的也相同,都是在这样配置启用,后面就不多提了
<root level="info">
<appender-ref ref="consoleLog" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
root>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERRORlevel>
<onMatch>DENYonMatch>
<onMismatch>ACCEPTonMismatch>
filter>
<encoder>
<pattern>
%msg%n
pattern>
encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>F:/project/sell/log/info.%d.logfileNamePattern>
rollingPolicy>
appender>
跟上面的fileInfoLog大同小异,滚动策略都是一样的,只是改了一个后面的文件名称,改了过滤器的类
上面用的是ch.qos.logback.classic.filter.LevelFilter
这个类
而这里用的是ch.qos.logback.classic.filter.ThresholdFilter
这个类
那有人会问了,这两个类有什么区别呢?
ThresholdFilter这个类,是只输出指定级别的日志,如我们配置的
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERRORlevel>
filter>
表示只拦截error级别的日志信息.如果我们只想要输出,error级别的日志是没有问题的,error是级别最高的,所以只输出error的信息.
但如果用这个配置,拦截info级别的日志,就会出现问题了,因为info是中间级别的,不是最高级别,如果用这个拦截了info,除了输出info级别的日志信息外,还会输出warn级别和error级别,两个比它高的级别的日志.所以不能会这个类来配置info级别的file文件
那要怎么样才可能让一个文件只输出info级别的日志信息呢?
那就要用到下面这个类了LevelFilter.
LevelFilter这个类,要配合onMatch标签,如果该标签中是DENY则,说明拦截该标签级别,onMismatch标签是ACCEPT,则说明,没抓取到上面lever级别的日志,就accept,即放行.
查看源码,可以看到有三种FilterReply可以选择DENY、NEUTRAL、ACCEPT.
第一个是禁止,很容易理解
第二个是中立,就是忽略当前规则,进入下一条规则
第三个是接受、处理,被当前规则所接受、处理
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERRORlevel>
filter>
<encoder>
<pattern>
%msg%n
pattern>
encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>F:/project/sell/log/error.%d.logfileNamePattern>
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>INFOlevel>
<onMatch>ACCEPTonMatch>
<onMismatch>DENYonMismatch>
filter>
<encoder>
<pattern>
%d - %msg%n
pattern>
encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>F:/project/sell/log/info.%d.logfileNamePattern>
rollingPolicy>
appender>
这样就可以了!!!
%d - %msg%n
INFO
ACCEPT
DENY
%d - %msg%n
F:/project/sell/log/info.%d.log
ERROR
%d - %msg%n
F:/project/sell/log/error.%d.log