当我们在开发、调试和运行程序时,经常会遇到需要限制部分日志的输出情况。这时候就需要使用logback的过滤器来实现。
在logback中,我们可以通过使用
下面是实现过滤部分日志输出的操作的完整攻略:
- 首先,在logback.xml配置文件中定义一个或多个过滤器,如下所示:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.core.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
在上述配置中,我们定义了一个ThresholdFilter过滤器,级别为ERROR。这意味着,只有日志级别为ERROR的日志才将被记录。其他级别的日志将被过滤掉。
- 把定义好的过滤器添加到想要过滤的logger或appender的filter链中,如下所示:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.core.filter.AndFilter">
<filters>
<filter class="ch.qos.logback.core.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<filter class="ch.qos.logback.classic.filter.LoggerNameFilter">
<loggerName>org.springframework</loggerName>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</filters>
</filter>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
在上述配置中,我们定义了一个AndFilter过滤器,它由两个过滤器(ThresholdFilter和LoggerNameFilter)组成。这个过滤器的意思是,只有日志级别为ERROR,并且logger名称为org.springframework的日志才将被记录。其他级别和logger名称的日志将被过滤掉。
接下来,我们看两个例子:
- 只记录Error级别的日志
在logback.xml配置文件中添加以下配置:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.core.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
在上面的配置中,我们只记录Error级别的日志,其他级别的日志都被过滤掉。
- 只记录指定logger的Info级别的日志
在logback.xml配置文件中添加以下配置:
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.core.filter.AndFilter">
<filters>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LoggerNameFilter">
<loggerName>com.example.mylogger</loggerName>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</filters>
</filter>
<encoder>
<pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="ERROR">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
在上面的配置中,我们只记录com.example.mylogger的Info级别的日志,其他级别和其他logger的日志都被过滤掉。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:logback过滤部分日志输出的操作 - Python技术站