为什么SLF4J在我的项目中找不到任何提供者?

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

我最近分叉了一个 GitHub 项目,并一直在努力更新它。我的主要目标之一是删除旧的(易受攻击的)Log4J v1.2 并用 Log4J 2.2 替换它。原始项目使用旧版本的 SFL4J 和 Log4J v1.2。

我写的 Java 不多,也从未使用过 Gradle,直到我 fork 这个项目,所以要温柔。

无论如何,无论我做什么或尝试,SLF4J 在运行我的应用程序时总是报告以下内容:

SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.

我已经阅读了许多涵盖设置的教程,但我似乎无法让它工作。

我尝试使用以下设置:

slf4j-api-2.0.7.jar
log4j-api-2.20.0.jar
log4j-core-2.20.0.jar
log4j-slf4j2-impl-2.20.0.jar
log4j2.properties

我还尝试放弃 log4j2 并使用更简单的设置,仅使用 SLF4J 中的 SimpleLogger:

slf4j-api-2.0.7.jar
slf4j-simple-2.0.7.jar

但是,SLF4J 报告了同样的问题。我目前正在使用以下公共存储库: https://github.com/jmoscola/PygmyMarmoset/tree/updateLogging

文件default.deps包含当前的依赖项。 Log4J 目前已被注释掉,但这将是首选记录器,因为我想维护日志文件的每日滚动。

子项目 PygmyMarmosetLauncher 中的文件 UberjarDaemon.java 显示了使用 org.slf4j 的基本 Logger/LoggerFactory 设置

构建既快速又简单:

  1. ./fetchdeps.pl
  2. gradle uberJar

如果有人能给我一些关于我哪里出错的提示,我真的很感激。

java logging log4j log4j2 slf4j
1个回答
0
投票

感谢 @g00se 的评论,我能够让一切正常工作。

  • 首先,我必须将 log4J 属性文件放入类路径中,这是我的 UberJar 的根目录。以前,我尝试将 log4J 属性文件放入 /war/WEB-INF/classes 文件夹中,但这对我来说不起作用。我编辑了 rootProject build.gradle 文件以将属性文件获取到需要的位置。

  • 我还意识到我的 log4J 属性文件的名称错误。该项目以前使用 log4J 1.2,因此它已经有一个现有的“log4j.properties”文件。在阅读文档和教程时,我最初没有注意到 log4J 2.20 使用新的文件名“log4j2.properties”。

  • 最后,我遇到了一些语法问题,因为我没有正确更新 log4J2 的 log4J 1.2 语法。

我现在可以使用 SLF4J API 和 log4J2 进行日志记录。话虽如此,我仍然在标准输出中看到“未找到 SLF4J 提供程序”消息。但我愿意忽略它,因为正在生成日志。我怀疑这与多个子项目的存在有关,其中一个子项目启动 web 应用程序(并且可能有不同的类路径?)。但是,这是另一天的问题。

© www.soinside.com 2019 - 2024. All rights reserved.