log4j~faq建议至少使用log4j-api-2.x
and log4j-core-2.x
。最好将这些添加到您的build.gradle
文件中:
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.9.0'
compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.9.0'
compile group: 'org.apache.logging.log4j', name: 'log4j-1.2-api', version: '2.9.0'
并确保排除冲突的依赖项
在module-info.java
进一步你应该更新(这是我在自定义 maven 项目中所做的)
requires log4j; // not log4j.api
它也应该适用于您,并且具有相同的目录结构。
提示:这是我开始调试它的地方。
为什么我会看到有关“找不到记录器的附加程序”和“请正确配置 log4j”的警告?
当无法找到默认配置文件log4j.properties和 log4j.xml 并且应用程序未执行显式配置时,会发生这种情况。log4j 用于Thread.getContextClassLoader().getResource()
定位默认配置文件,不直接检查文件系统...
在方法中放置一个调试点,ClassLoader#getResource
并密切关注库查找的资源。
还要提出有关资源的观点,如JDK-8142968resources/foo/bar/log4j.properties
中的发行说明中所述
- 标准和 JDK 模块中的 JDK 内部资源(类文件除外)不能再通过
ClassLoader.getResourceXXX
API 定位。这可能会影响依赖使用这些 API 来获取 JDK 内部属性文件或其他资源的代码。
并得到以下 java-doc 的支持ClassLoader#getResource
:
- 命名模块中的资源受
Module.getResourceAsStream
. 此外,除了资源名称以“.class”结尾的特殊情况外,该方法只会在无条件打开包的情况下查找命名模块包中的资源(即使该方法的调用者在同一模块作为资源)。