在log4j
中,大多数(如果不是全部)appender扩展AppenderSkeleton
,它提供setThreshold(Priority)
方法来设置必须设置为消息的最小“级别”将它记录在某处。
我想根据消息的完全级别/优先级将消息记录到不同的appender。
例如,我希望DEBUG消息记录到ConsoleAppender
,但不是其他地方。我希望INFO消息记录到FileAppender
而不是其他地方。我想让ERROR消息记录到JMSAppender
而不是其他地方。
问题是这个setThreshold(Priority)
方法,它设置记录消息所需的“最小阈值”。
当然,我可以将ConsoleAppender
的阈值设置为DEBUG,但由于INFO和ERROR消息比DEBUG消息“更高”,我也会收到发送到ConsoleAppender的INFO和ERROR消息。 / p>
是否有方法或方法配置appender“levels”/ priority 或者这个最小阈值是我唯一的追索权?
使用LevelMatchFilter进行编辑:
这是朝着正确方向迈出的一步吗?
LevelMatchFilter filter = new LevelMatchFilter();
filter.setLevelToMatch(Level.DEBUG.toString());
consoleAppender.addFilter(filter);
上面的代码片段是否可以完成确保ConsoleAppender
记录DEBUG和仅 DEBUG的工作?
答案 0 :(得分:0)
您可以将LevelMatchFilter附加到任何appender,以仅按照确切级别过滤日志消息。
来自javadoc:
这是一个基于级别匹配的非常简单的过滤器。
过滤器允许两个选项LevelToMatch
和AcceptOnMatch
。如果LevelToMatch
选项的值与LoggingEvent
的级别完全匹配,则decide(org.apache.log4j.spi.LoggingEvent)
方法会返回Filter.ACCEPT
,以防AcceptOnMatch
option value设置为true,如果为false,则返回Filter.DENY
。如果没有匹配项,则返回Filter.NEUTRAL
。