在 log4j
中,大多数(如果不是全部)appender 都扩展了 AppenderSkeleton
,它提供了 setThreshold(Priority)
方法来设置最小“级别”必须设置一条消息,以便附加程序将其记录在某处。
我想根据消息的确切级别/优先级将消息记录到不同的附加程序。
例如,我希望 DEBUG 消息记录到 ConsoleAppender
,而不是其他地方。我希望 INFO 消息记录到 FileAppender 而不是其他地方。我希望错误消息记录到 JMSAppender
而不是其他地方。
问题在于这个 setThreshold(Priority)
方法,它设置记录消息所需的“最小阈值”。
当然,我可以将ConsoleAppender的阈值设置为DEBUG,但由于INFO和ERROR消息比DEBUG消息“更高”,我还将收到发送到ConsoleAppender的INFO和ERROR消息,如下所示好吧。
是否有一些方法或方法可以准确地配置附加程序“级别”/优先级,或者这个最小阈值是我唯一的资源?
使用 LevelMatchFilter 进行编辑:
这是朝着正确方向迈出的一步吗?
LevelMatchFilter filter = new LevelMatchFilter();
filter.setLevelToMatch(Level.DEBUG.toString());
consoleAppender.addFilter(filter);
上面的代码片段能否完成确保 ConsoleAppender
记录 DEBUG 的工作,并且仅记录 DEBUG?
最佳答案
您可以附上LevelMatchFilter到任何附加程序以仅按确切级别过滤日志消息。
来自javadoc:
这是一个非常简单的基于级别匹配的过滤器。
过滤器允许两个选项LevelToMatch
和AcceptOnMatch
。如果 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/