温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Logger 怎样过滤日志

发布时间:2026-09-12 10:17:04 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

在 Java 中,**日志过滤(Filter)**通常取决于你使用的日志框架。下面以最常见的几种为例说明。


一、java.util.logging(JDK 自带 Logger)

1. 通过 Level 过滤(最基础)

Logger logger = Logger.getLogger("com.example");
logger.setLevel(Level.WARNING); // 只记录 WARNING 及以上

2. 使用 Filter 接口(自定义过滤)

logger.setFilter(record -> {
    // 只记录包含 "IMPORTANT" 的日志
    return record.getMessage().contains("IMPORTANT");
});

二、Logback(Spring 常用)

1. 按包 / 类过滤(logback.xml)

<logger name="com.example.service" level="DEBUG"/>
<root level="INFO">
    <appender-ref ref="CONSOLE"/>
</root>

2. 使用 TurboFilter(全局过滤)

public class MyTurboFilter extends TurboFilter {
    @Override
    public FilterReply decide(Marker marker, Logger logger,
                              Level level, String format, Object[] params, Throwable t) {
        if (logger.getName().contains("test")) {
            return FilterReply.DENY;
        }
        return FilterReply.NEUTRAL;
    }
}

配置:

<turboFilter class="com.example.MyTurboFilter"/>

3. 使用 LevelFilter(Appender 级别)

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

三、Log4j2(常用企业级)

1. 按级别 / 包过滤

<Logger name="com.example" level="warn"/>

2. 使用 Filter

<Console name="Console">
    <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Console>

3. 自定义 Filter

public class MyFilter extends AbstractFilter {
    @Override
    public Result filter(LogEvent event) {
        return event.getMessage().getFormattedMessage().contains("debug")
                ? Result.DENY : Result.NEUTRAL;
    }
}

四、常见过滤维度总结

维度 示例
日志级别 ERROR / WARN / INFO
包名 / 类名 com.xxx.service
关键字 包含 / 不包含
线程 threadName
MDC userId, traceId
时间 时间段过滤

五、建议

  • 简单需求:用 Level + 包名
  • 复杂规则:用 Filter / TurboFilter
  • 生产环境:优先在配置文件中控制,避免代码硬编码

如果你能告诉我你用的是 JDK Logger / Logback / Log4j2,我可以给你更精确的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI