log4j2和logback日志过滤级别

本文详细介绍了log4j和logback中的日志过滤配置方法,包括onMatch、onMismatch属性的作用,不同过滤器如LevelFilter、ThresholdFilter和EvaluatorFilter的应用场景及配置示例。

1. 属性说明

 onMatch和onMismatch都有三个属性值,分别为Accept、DENY和NEUTRAL

onMatch:对符合过滤级别的日志的操作。(DENY,NEUTRAL,ACCEPT)

onMismatch:对不符合过滤级别的日志的操作。(DENY,NEUTRAL,ACCEPT)

DENY:日志将立即被抛弃不再经过其他过滤器;

NEUTRAL:有序列表里的下个过滤器过接着处理日志;(该级别既不处理,也不抛弃,相当于没有任何处理,日志会被保存下来并在本appender被执行)

ACCEPT:日志会被立即处理,不再经过剩余过滤器

日志级别顺序:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

 2 单一应用

log42j配置示例

匹配INFO级别以及以上级别,不匹配INFO级别以下级别,即: 匹配 >= INFO的级别
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
不匹配WARN级别以及以上级别,匹配WARN级别以下级别,即: 匹配 < WARN的级别
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="ACCEPT"/>

3 组合应用

log42j配置示例

<filters>
    <!--不包含-->
    <ThresholdFilter level="WARN" onMatch="DENY"     onMismatch="NEUTRAL"/>
    <!--包含-->
    <ThresholdFilter level="INFO"   onMatch="ACCEPT" onMismatch="DENY"/>
</filters>

4 log4j2的过滤器:

<Filters>
<ThresholdFilter level="TRACE" onMatch="NEUTRAL" onMismatch="DENY"/>
<RegexFilter regex=".* test .*" onMatch="NEUTRAL" onMismatch="DENY"/>
<TimeFilter start="05:00:00" end="05:30:00" onMatch=" NEUTRAL " onMismatch="DENY"/>    
</Filters>

 5. logback 过滤器 

关于logback日志级别的配置 - 抄手砚 - 博客园

 1.级别过滤器

LevelFilter: 级别过滤器,对特定某个级别的日志进行过滤。

只记录INFO和WARN级别的日志
  <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

只记录ERROR和DEBUG的日志
<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>DENY</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>DENY</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>

2. 临界值过滤器

ThresholdFilter: 临界值过滤器,只打印指定级别(包含该级别)以上的日志。它没有过多的参数,只有默认配置。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志返回DENY

打印ERROR,INFO,WARN的日志        
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level> 
 </filter>

LevelFilter和ThresholdFilter组合使用只打印DEBUG和ERROR
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>

3.EvaluatorFilter

EvaluatorFilter是求值过滤器,评估、鉴别日志是否符合指定条件。

<filter class="ch.qos.logback.core.filter.EvaluatorFilter">         
  <evaluator> <!-- 默认为 ch.qos.logback.classic.boolex.JaninoEventEvaluator -->   
	<expression>return message.contains("billing");</expression>   
  </evaluator>   
  <OnMatch>ACCEPT </OnMatch>  
  <OnMismatch>DENY</OnMismatch>  
</filter>   

<think>嗯,用户问的是在Spring Boot中使用Log4j2还是Logback来记录日志。我需要先理清楚这两个框架的特点它们在Spring Boot中的集成情况。 首先,Spring Boot默认的日志框架是Logback,所以如果用户不进行额外配置,会自动使用Logback。这可能对新手来说比较方便,因为不需要额外设置。LogbackLog4j的原作者开发,性能不错,而且SLF4J的集成很好,支持异步日志配置文件的热更新,这些都是优点。但用户可能需要处理更复杂的日志需求时,Logback会不会不够灵活? 然后Log4j2是另一个流行的选择,它据说在性能上有提升,特别是在高并发情况下,异步日志的性能比Logback更好。而且Log4j2支持插件扩展,配置更灵活,比如可以同时输出到多个目的地,还有丰富的过滤功能。但问题在于,Spring Boot默认不支持Log4j2,需要排除掉Logback的依赖,然后引入Log4j2的starter。这会不会增加配置的复杂度?用户是否有足够的技术能力来处理依赖冲突? 接下来要考虑用户的实际需求。如果项目需要高性能的日志处理,比如高频日志记录,可能Log4j2更适合。如果项目已经用Spring Boot默认配置,而且需求不复杂,Logback可能更省心。另外,社区支持更新情况,Log4j2目前更活跃,而Logback已经有一段时间没更新了,这点可能影响长期维护。 还有兼容性问题,比如项目中是否有其他库依赖LogbackLog4j2,需要排除冲突。比如用了Spring Security,会不会有隐含的依赖?用户是否了解如何在Maven或Gradle中排除默认的Logback,并引入Log4j2的依赖? 总结下来,需要分情况讨论:默认简便性、性能需求、配置灵活性、维护社区支持。然后给出建议,根据项目具体情况选择,如果不需要特别高的性能,用默认的Logback;如果需要高性能扩展性,换成Log4j2。同时,给出配置步骤的示例,帮助用户实际操作。</think>在Spring Boot中选择Log4j2Logback作为日志框架时,需要从以下角度逐步分析: --- ### 一、默认行为 1. **Spring Boot默认集成Logback** - 无需额外配置,开箱即用 - 依赖`spring-boot-starter-logging`(隐含在`spring-boot-starter`中) 2. **使用Log4j2需主动配置** - 需排除默认Logback依赖 - 添加`spring-boot-starter-log4j2`依赖 --- ### 二、性能对比 | 特性 | Logback | Log4j2 | |---------------------|----------------------|-----------------------| | 异步日志性能 | 中等 | **高**(基于Disruptor)| | 同步写入延迟 | 较低 | 更低 | | 内存占用 | 中等 | 优化更好 | **结论**:高并发场景下,Log4j2的异步日志性能更优。 --- ### 三、功能特性 #### Logback优势 1. 与SLF4J无缝集成 2. 支持条件化配置(`<if>`标签) 3. 配置文件热更新(通过`scan="true"`) #### Log4j2优势 1. **插件化架构**(可扩展自定义组件) 2. 支持**混合异步/同步日志** 3. 更丰富的过滤策略(如`ThresholdFilter`、`RegexFilter`) 4. 支持**JSON/XML/YAML格式配置** --- ### 四、配置示例 #### 切换为Log4j2步骤(Maven) ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> ``` --- ### 五、选型建议 1. **优先选Logback的场景** - 项目无需高频日志记录 - 希望减少依赖冲突风险 - 需要快速启动的简单应用 2. **优先选Log4j2的场景** - 高吞吐需求(如每秒万级日志) - 需要动态日志过滤策略 - 使用分布式追踪(支持MDC扩展) --- ### 六、验证方式 1. **检查当前日志框架** 启动时观察控制台输出: - Logback: `Initializing Logback from [logback-spring.xml]` - Log4j2: `Loading configuration from [log4j2.xml]` --- **最终结论**:若项目无特殊性能需求,沿用Logback更简单;若需高性能或高级功能,建议迁移到Log4j2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值