如何关闭 SLF4J 的日志记录?

问题描述 投票:0回答:6

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

[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 的一些配置,但一无所获。他们的网站也没有帮助。

java logging jakarta-ee slf4j
6个回答
17
投票

slf4j 只是实际日志后端的一个漏斗(此处覆盖 jakarta commons 日志记录),这是您必须配置以消除某种消息的漏斗。对于 logback,这是适当的配置片段,位于您的

logback.xml
配置文件中:

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

对于 log4j 来说非常相似。


15
投票

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

至少这样你就不需要搞乱日志配置文件...


4
投票

@sparkyspider回答所述,您可以简单地将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 Loggin 框架适配器,它变成了另一个外观。 公共日志记录配置


3
投票

哪个日志后端,例如logback、log4j、j.u.l.,你在用吗?您需要配置后端来过滤这些消息。

此外,日志消息指向“

org.slf4j.impl.JCLLoggerAdapter
”这一事实表明呼叫者位置推断无法正常工作。 (它应该提及实际的呼叫者而不是
JCLLoggerAdapter
)。如果出现以下情况,就会发生这种情况:

  1. 您正在使用旧版本的 SLF4J

  1. 调用者正在使用类似 slf4j 的包装器或拥有自己的自制日志 API,该 API 无法正确推断调用者位置。另请参阅相关的 SLF4J 常见问题解答条目

1
投票

使用您的

IDE
搜索以下字符串:level="DEBUG"。 您将在 .xml 文件中找到该文本。

去那里并使用

level="INFO"
而不是
level="DEBUG"

键值不区分大小写。

可能有这样的事情:

<root level="info">
    ...
</root>
© www.soinside.com 2019 - 2024. All rights reserved.