java - 如何将 log4j 消息路由到唯一的附加程序

标签 java logging log4j

log4j 中,大多数(如果不是全部)appender 都扩展了 AppenderSkeleton,它提供了 setThreshold(Priority) 方法来设置最小“级别”必须设置一条消息,以便附加程序将其记录在某处。

我想根据消息的确切级别/优先级将消息记录到不同的附加程序。

例如,我希望 DEBUG 消息记录到 ConsoleAppender,而不是其他地方。我希望 INFO 消息记录到 FileAppender 而不是其他地方。我希望错误消息记录到 JMSAppender 而不是其他地方。

问题在于这个 setThreshold(Priority) 方法,它设置记录消息所需的“最小阈值”。

当然,我可以将ConsoleAppender的阈值设置为DEBUG,但由于INFO和ERROR消息比DEBUG消息“更高”,我还将收到发送到C​​onsoleAppender的INFO和ERROR消息,如下所示好吧。

是否有一些方法或方法可以准确地配置附加程序“级别”/优先级,或者这个最小阈值是我唯一的资源?

使用 LevelMatchFilter 进行编辑:
这是朝着正确方向迈出的一步吗?

LevelMatchFilter filter = new LevelMatchFilter();
filter.setLevelToMatch(Level.DEBUG.toString());

consoleAppender.addFilter(filter);

上面的代码片段能否完成确保 ConsoleAppender 记录 DEBUG 的工作,并且记录 DEBUG?

最佳答案

您可以附上LevelMatchFilter到任何附加程序以仅按确切级别过滤日志消息。

来自javadoc:

这是一个非常简单的基于级别匹配的过滤器。

过滤器允许两个选项LevelToMatchAcceptOnMatch。如果 LevelToMatch 选项的值与 LoggingEvent 的级别完全匹配,则 decide(org.apache.log4j.spi.LoggingEvent ) 方法在 AcceptOnMatch 选项值设置为 true 的情况下返回 Filter.ACCEPT,如果为 false,则返回 Filter.DENY被返回。如果没有匹配,则返回Filter.NEUTRAL

关于java - 如何将 log4j 消息路由到唯一的附加程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9082602/

相关文章:

java - 生成失败的评估根项目-Gradle

windows - Logback 和 Windows 事件系统集成

.net - CRUD 应用程序日志记录

python - 如何将 site_id 或主机添加到 Django 调试日志?

spring - Hibernate(4.3.11-Final)日志记录未桥接至 log4j2?

使用 log4j 和 log4j.yaml 进行 java 日志记录

java - 使用可变参数 (varargs) 的方法重载

java - 通过调用另一个类进行 JUnit 测试

java - 关于构造函数的困惑

bash - 持久 AWK 程序