【问题标题】:Configuring two logback appenders independently独立配置两个 logback appender
【发布时间】:2014-07-31 05:29:29
【问题描述】:

我可能会问一些微不足道的问题,但我尝试过的似乎不起作用。使用我的“主要”附加程序,我想在任何地方记录所有“信息”,除了第三方包(我们称之为boring),它会产生太多的信息(所以我只看警告)。此外,我想在我的interesting 包中记录“调试”。这适用于以下logback.groovy:

root(INFO, ["MAIN"])
logger("interesting", DEBUG, ["MAIN"])
logger("boring", WARN, ["MAIN"])

现在我想配置一个不同的 appender 记录一个更像的级别

root(DEBUG, ["DETAIL"])
logger("interesting", TRACE, ["DETAIL"])
logger("boring", INFO, ["DETAIL"])

这也可以,但是当我将两者放在一起时,它就不行了。我可以想象这是由于每个Logger 在给定级别上要么打开要么关闭。我知道,对于我想要的行为,“无聊”包中的记录器必须在 INFO 级别(因为DETAIL appender)并且要过滤MAIN appender 的消息,但是我看不到如何配置它。

更新

我发现我几乎做错了所有事情。线

logger("interesting", DEBUG, ["MAIN"])

没有说“为 MAIN appender 和包 interesting 及以下设置级别为 DEBUG”),而是做了两个独立的事情:

  • 将包interesting及以下的级别设置为DEBUG
  • 将 MAIN 附加程序添加到“有趣的”Logger

【问题讨论】:

    标签: configuration logback appender


    【解决方案1】:

    如果不编写自己的过滤器,这似乎是不可能的,幸运的是这很容易。我最终得到了类似的东西

    root(DEBUG, ["DETAIL", "MAIN"])
    // settings for the most detailed appender
    logger("interesting", TRACE)
    logger("boring", INFO)
    
    appender("MAIN", ...) {
        ...
        filter = new MyFilter()
            .deny("boring", INFO)
            .accept("interesting", DEBUG)
            .deny("", DEBUG)
    }
    

    其中deny 和accept 是我向MyFilter 添加条目的方法。条目是按顺序评估的,即,

    • 在boring 及以下的包中,所有级别为INFO 或以下的内容都会被拒绝
    • interesting 及以下包中,DEBUG 或以上级别的所有内容均被接受
    • 否则,在任何包中,所有级别为DEBUG 或以上的内容都会被拒绝

    灵感来自this question。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      相关资源
      最近更新 更多