在 Java 中,Logger(java.util.logging.Logger) 的“过滤”通常可以从 级别过滤、自定义 Filter、Handler 过滤、配置文件过滤 几个层面来做。下面按常见用法给你系统说明。
Logger 本身有级别(Level):
Logger logger = Logger.getLogger("com.example");
logger.setLevel(Level.WARNING); // 只记录 WARNING 及以上
级别顺序(由低到高):
FINEST < FINER < FINE < CONFIG < INFO < WARNING < SEVERE
⚠️ 注意:
Logger级别 && Handler级别Logger logger = Logger.getLogger("com.example");
ConsoleHandler handler = new ConsoleHandler();
handler.setLevel(Level.INFO);
logger.addHandler(handler);
logger.setUseParentHandlers(false);
这样即使 Logger 是 ALL,也只会输出 INFO 及以上。
实现 java.util.logging.Filter 接口:
public class MyFilter implements Filter {
@Override
public boolean isLoggable(LogRecord record) {
// 只记录包含 "IMPORTANT" 的日志
return record.getMessage().contains("IMPORTANT");
}
}
使用方式:
logger.setFilter(new MyFilter());
或只对某个 Handler 过滤:
handler.setFilter(new MyFilter());
✅ Filter 的返回值:
true → 记录false → 丢弃Logger logger = Logger.getLogger("com.example.service");
在 logging.properties 中:
com.example.service.level = FINE
com.example.dao.level = WARNING
示例:
handlers=java.util.logging.ConsoleHandler
.level=INFO
java.util.logging.ConsoleHandler.level = WARNING
com.example.level = FINE
启动参数:
java -Djava.util.logging.config.file=logging.properties Main
❌ 只设置 Logger 级别,但 Handler 是 WARNING,结果看不到 INFO
✅ Logger 和 Handler 级别都要检查
❌ 忘记关父 Handler
logger.setUseParentHandlers(false);
如果你实际用的是:
过滤方式会完全不同(基于 Appender / Filter / Marker),可以告诉我你用哪个框架,我可以给你对应示例。
Java Logger 过滤 = 级别 + Filter + Handler + 名称 四层控制
如果你有具体场景(比如“只记录某个用户”、“忽略某些异常”),可以直接说,我帮你写完整示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。