logback.xml(过滤器)

本文深入解析了logback中的过滤器机制,包括LevelFilter级别过滤器和ThresholdFilter临界值过滤器的工作原理及配置方法。LevelFilter根据日志级别进行过滤,而ThresholdFilter则过滤掉低于指定临界值的日志。

https://blog.youkuaiyun.com/weixin_44779019/article/details/96506341
此篇详细解析logback中的filter
日志框架的主导思想:能够将日志进行分门别类

logback两种基本过滤器
  • <filter>常识
  • LevelFilter级别过滤器
  • ThresholdFilter 临界值过滤器

1. <filter>常识
过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。
返回DENY,日志将立即被抛弃不再经过其他过滤器;
返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;
返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。
过滤器被添加到 中,为 添加一个或多个过滤器后,可以用任意条件对日志进行过滤。 有多个过滤器时,按照配置顺序执行。

2. LevelFilter级别过滤器
根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。有以下子节点:
<level>:设置过滤级别
<onMatch>:用于配置符合过滤条件的操作
<onMismatch>:用于配置不符合过滤条件的操作
例:

  <appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--filter用于过滤信息-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <!--
        class:在此指定LevelFilter 级别过滤器
		 -->
            <level>ERROR</level>
            <!--级别类型:ERROR-->
            <onMatch>DENY</onMatch>
            <!--匹配==> DENY(抛弃且其他过滤器也不匹配)-->
            <onMismatch>ACCEPT</onMismatch>
            <!--未匹配==》ACCEPT(接送且不再被其他过滤器匹配)-->
        </filter>
<!--
	本人就此例简述:所以的日志信息只判断是否为ERROR级别,
	如果是ERROR级别就将该条日志信息从所有日志中踢除,
	如果某一日志不是ERROR级别,就将日志留下而后打印到特定的地方。
-->
        <encoder>
            <pattern>
               %d-%msg%n
            </pattern>
        </encoder>
        <!--TimeBasedRollingPolicy滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>D:\Documents\Desktop\日志文件夹\info.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
    </appender>

3. ThresholdFilter 临界值过滤器
过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。

<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--filter用于过滤信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>ERROR</level>
        <!--
        由于ERROR级别日志为最高,因此只会打印留下ERROR级别的日志进行打印
        -->
        </filter>
        <encoder>
            <pattern>
                %msg%n
            </pattern>
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>D:\Documents\Desktop\日志文件夹\error.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
    </appender>

参考博客:https://blog.youkuaiyun.com/shuidingdang/article/details/77975314

### 配置 Logback日志过滤和格式化规则 #### 日志过滤配置 Logback 支持多种类型的过滤器来实现日志的精确控制。以下是两种常用的过滤方式: 1. **LevelFilter 过滤器** LevelFilter 可以用于筛选特定级别的日志消息,例如仅允许 ERROR 级别的日志被记录下来。 ```xml <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <!-- 设置文件路径 --> <file>logs/app.log</file> <!-- 添加 LevelFilter --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <!-- 输出编码 --> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> ``` 2. **ThresholdFilter 过滤器** ThresholdFilter 是一种简单的过滤机制,可以排除低于指定阈值的日志级别。 ```xml <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- 添加 ThresholdFilter --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> <!-- 控制台输出编码 --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> ``` 以上两段代码分别展示了如何通过 `LevelFilter` 和 `ThresholdFilter` 来实现日志过滤功能[^2]。 --- #### 日志格式化规则 Logback 使用 `<encoder>` 节点定义日志的输出格式。常见的格式化模式如下所示: - `%d`: 时间戳,默认格式为 ISO8601。 - `%thread`: 当前线程名称。 - `%level`: 日志级别(DEBUG、INFO、WARN 或 ERROR)。 - `%logger`: 记录该条日志的 logger 名称。 - `%msg`: 实际的日志消息内容。 - `%n`: 换行符。 下面是一个完整的日志格式化示例: ```xml <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="CONSOLE"/> </root> </configuration> ``` 此配置会将日志打印到控制台上,并按照自定义的时间戳、线程名、日志等级等字段进行格式化显示[^1]。 --- #### 综合案例:同时应用过滤与格式化 以下是一个综合性的 `logback.xml` 配置示例,展示如何结合过滤器和格式化规则一起工作: ```xml <configuration> <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>logs/application.log</file> <!-- 定义滚动策略 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logs/application-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 应用 ThresholdFilter --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <!-- 自定义日志格式 --> <encoder> <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="ROLLING_FILE"/> </root> </configuration> ``` 在此配置中,日志会被写入文件并按日期分隔存储;当单个文件超过 10 MB 时触发新文件创建;同时只保留 INFO 级别及其以上的日志[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值