如何使特定库中的记录器静音

时间:2017-03-01 00:15:00

标签: logback slf4j

我在我的代码中使用了一个库,它有以下logback.xml

<configuration>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%date - %-5p %t %-25logger{0} %F:%L %m%n</pattern>
    </encoder>
  </appender>

  <root level="INFO">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

我无法控制此.xml文件,因为库作者拥有此文件,我只是将她的库用作jar文件。

现在当我将库用作jar时,我在输出中看到了很多“INFO”语句。我想从这个库中关闭记录器的输出。

我不想为我的应用程序全局关闭(或提高日志的严重性)。我只想让这个库中的日志静音。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以将logback.xml的位置指定为系统属性,然后您可以更改它。

正如logback文档所说:

  

将默认配置文件的位置指定为系统属性

     

您可以使用名为“logback.configurationFile”的系统属性指定默认配置文件的位置。此属性的值可以是URL,类路径上的资源或应用程序外部文件的路径。

     

java -Dlogback.configurationFile = / path / to / config.xml chapters.configuration.MyApp1

     

请注意,文件扩展名必须为“.xml”或“.groovy”。其他扩展名被忽略。显式注册状态侦听器可能有助于调试查找配置文件的问题。

<强>更新

要禁止指定包中的日志,可以在logback.xml中定义记录器。

E.g。要禁止“io.netty”包中的日志,请将&lt; logger name =“io.netty”level =“WARN”/&gt; 添加到logback.xml。

答案 1 :(得分:1)

我能够解决问题。我正在为其他人列出我的解决方案。

所以问题是我们有多个库,每个库都有自己的记录器。我们想要一些而不是其他人的输出。我们可以通过下面的例子轻松模拟这个

height

现在让我们说我们要保留Foo记录器的输出但不想要Bar logger的输出。

我们将调整我们的logback.xml,如

content

这里我们为foo明确设置一个记录器,并将其级别设置为trace并将root设置为off。所有没有特定记录器的人都将进入root用户,无法记录任何内容。