如何将log4j消息路由到唯一的appender

时间:2012-01-31 15:56:42

标签: java logging log4j

log4j中,大多数(如果不是全部)appender扩展AppenderSkeleton,它提供setThreshold(Priority)方法来设置必须设置为消息的最小“级别”将它记录在某处。

我想根据消息的完全级别/优先级将消息记录到不同的appender。

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

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

当然,我可以将ConsoleAppender的阈值设置为DEBUG,但由于INFO和ERROR消息比DEBUG消息“更高”,我也会收到发送到C​​onsoleAppender的INFO和ERROR消息。 / p>

是否有方法或方法配置appender“levels”/ priority 或者这个最小阈值是我唯一的追索权?

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

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

consoleAppender.addFilter(filter);

上面的代码片段是否可以完成确保ConsoleAppender记录DEBUG和 DEBUG的工作?

1 个答案:

答案 0 :(得分:0)

您可以将LevelMatchFilter附加到任何appender,以仅按照确切级别过滤日志消息。

来自javadoc:

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

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