在 Java 中,**日志过滤(Filter)**通常取决于你使用的日志框架。下面以最常见的几种为例说明。
Level 过滤(最基础)Logger logger = Logger.getLogger("com.example");
logger.setLevel(Level.WARNING); // 只记录 WARNING 及以上
Filter 接口(自定义过滤)logger.setFilter(record -> {
// 只记录包含 "IMPORTANT" 的日志
return record.getMessage().contains("IMPORTANT");
});
<logger name="com.example.service" level="DEBUG"/>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
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"/>
<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>
<Logger name="com.example" level="warn"/>
<Console name="Console">
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Console>
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 |
| 时间 | 时间段过滤 |
如果你能告诉我你用的是 JDK Logger / Logback / Log4j2,我可以给你更精确的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。