我最近分叉了一个 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 设置
构建既快速又简单:
如果有人能给我一些关于我哪里出错的提示,我真的很感激。
感谢 @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 应用程序(并且可能有不同的类路径?)。但是,这是另一天的问题。