如何关闭SLF4J的日志记录?

23

这是一个第三方应用程序在我们的应用服务器上生成大量日志条目,就像这样:

[03.03.10 15:21:57:250 CET] 00000180 FtpProtocolHa I org.slf4j.impl.JCLLoggerAdapter info Close connection : 10.227.10.10 - admin
[03.03.10 15:27:35:209 CET] 00000181 MinaFtpProtoc I org.slf4j.impl.JCLLoggerAdapter info [/10.227.10.10] CLOSED
++++

我该如何关闭SLF4J的输出?我在.war文件中查找了一些SLF4J的配置,但没有找到。它们的网站也没有提供帮助。

6个回答

17

slf4j只是一个漏斗到实际日志后端(在这里覆盖jakarta commons logging),您必须配置它以摆脱某种类型的消息。对于logback,这是适当的配置片段,应该放在您的logback.xml配置文件中:

    <!--  No Tomcat debug logs -->
    <configuration>
    ...
        <logger name="org.apache.catalina.core" level="OFF" />
    ...
    </configuration>

对于log4j,它非常相似。


这段代码片段应该放在哪里? - jtpereyda

15

或者,下载http://www.slf4j.org/dist/slf4j-1.6.4.tar.gz,在里面找到slf4j-nop-1.6.4.jar(这是一个无操作日志记录器),并将其包含在你的类路径中。当SLF4J类加载器看到它(它会查看类路径中可以使用的日志记录器),它应该停止记录日志(一旦你重新启动了应用程序)。

至少这样就不需要修改日志配置文件...


在我的系统上,我还必须从我的类路径中删除slf4j-log4j*.jar。 - philwalk
1
如果在类路径中有多个slf4j后端,slf4j会强烈不喜欢。 - Thorbjørn Ravn Andersen
我正在使用Maven,我添加了Zorn先生建议的依赖项,我按照Thorbjørn Ravn Andersen的建议更改了其他slf4j依赖项,使它们都具有相同的版本,但我仍然可以看到来自外部库的日志。 - vefthym

4
根据 @sparkyspider answer 的说法,您可以将 slf4j-nop 库简单地添加到您的应用程序中。
如果使用 Maven,请将以下内容添加到您的 pom.xml 文件中:
<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-nop</artifactId>
        <version>1.7.36</version>
    </dependency> 
</dependencies>

如果使用Gradle,请将以下内容添加到您的build.gradle[.kts]文件中:
dependencies {
    implementation("org.slf4j:slf4j-nop:1.7.36")
}

3

slf4j是一个用于不同日志框架的日志门面。上述输出来自Apache Commons Logging框架适配器,它本身也是另一个门面。Commons Logging配置


3
你正在使用哪个日志后端,例如logback、log4j、j.u.l.?你需要配置后端以过滤这些消息。
此外,日志消息指向“org.slf4j.impl.JCLLoggerAdapter”表明调用者位置推断不正确(它应该提到实际的调用者而不是JCLLoggerAdapter)。这可能发生在以下情况下:
1. 你正在使用较旧版本的SLF4J。
或者
2. 调用者正在使用类似slf4j的包装器或其自己的自制日志API,其无法正确推断调用者位置。请参阅相关的SLF4J FAQ entry

这是一个第三方应用程序。我没有访问任何代码的权限(除了反编译)。没有log4j.properties文件或任何其他看起来包含任何日志属性的文件。 - Tommy

1
在你的IDE中搜索以下字符串:level="DEBUG"。你会在一个.xml文件中找到这个文本。
转到该文件并使用level="INFO"代替level="DEBUG"
关键值不区分大小写。
可能会有类似以下内容的东西:
<root level="info">
    ...
</root>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接