【问题标题】:How to route log4j messages to unique appenders如何将 log4j 消息路由到唯一的附加程序
【发布时间】:2012-01-31 15:56:41
【问题描述】:

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

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

例如,我希望 DEBUG 消息记录到 ConsoleAppender,但没有其他地方。我希望 INFO 消息记录到 FileAppender 而别处。我希望 ERROR 消息记录到 JMSAppender 而不是其他任何地方。

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

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

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

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

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

consoleAppender.addFilter(filter);

上面的代码 sn-p 能否完成确保ConsoleAppender 记录调试和调试的工作?

【问题讨论】:

    标签: java logging log4j


    【解决方案1】:

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

    来自 javadoc:

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

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

    【讨论】:

    • 感谢 jalopaba - 请查看我编辑(添加)的代码 sn-p,如果我使用不正确,请告诉我。再次感谢!
    猜你喜欢
    • 2011-10-14
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多