独立配置两个logback appender

时间:2014-06-10 12:39:13

标签: configuration logback appender

我可能会问一些微不足道的事情,但我所尝试的似乎并不奏效。使用我的“MAIN”appender,我想在任何地方记录所有“信息”,除了第三方包(让我们称之为boring),这会产生太多的信息(所以我只看警告) 。另外,我想在我的interesting包中记录“debug”。这适用于以下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 appender添加到“有趣的”Logger

1 个答案:

答案 0 :(得分:0)

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

这样的东西
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)
}

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

  • 在包boring及更低版本中,等级INFO或以下的所有内容都将被拒绝
  • 在包interesting及以下,<{1}}或更高级别的所有内容都已被接受
  • 否则,在任何包中,级别DEBUG或更高级别的所有内容都将被拒绝

this question的启发。