我一定是做了什么蠢事,但我找不到它。我试图将Log4j添加到我的项目中,但它无法阅读属性文件。我创建了一个最小的可用示例项目。在IntelliJ中,我创建了一个新的gradle项目。我添加了log4j,并添加了一个主类。
下面是项目结构。
.
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ ├── java
│ │ └── Main.java
│ └── resources
│ └── log4j.properties
└── test
├── java
└── resources
build.gradle
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.3'
}
log4j.properties
log4j.rootLogger=TRACE
Main.java
import org.apache.logging.log4j.LogManager;
public class Main {
public static void main(String[] args) {
System.out.println("Print");
System.out.println("Root Logger Level: " + LogManager.getRootLogger().getLevel());
}
}
当我运行这个命令时,输出显示根日志的级别是“ERROR”,尽管我将其设置为trace。当然,这意味着任何低于错误级别的日志语句都不会被打印。
Print
Root Logger Level: ERROR
我读过的每一份文档都说属性文件需要在类路径的目录中,这是有道理的。根据gradle文档和我自己的调查,resources目录在类路径中。我尝试过将文件放在层次结构的每一层,但没有任何区别。我看不出为什么找不到属性文件。
我尝试通过将-Dlog4j.configuration=<full/path/to/properties>
添加到VM参数来直接指定它,但仍然不起作用,但gradle给出了以下输出:
BUILD SUCCESSFUL in 748ms
3 actionable tasks: 1 executed, 2 up-to-date
ERROR StatusLogger Reconfiguration failed: No configuration found for '2a139a55' at 'null' in 'null'
10:23:30 PM: Task execution finished 'Main.main()'.
这似乎是在程序终止后发生的。我不确定这是否相关。
我 * 一定 * 错过了什么愚蠢的事情,但我什么都找不到。我看了几十个例子,似乎我做的每件事都是正确的。我错过了什么?
2条答案
按热度按时间oyxsuwqo1#
对于原问题,由于您尝试使用log4j2,因此首选的配置方式是xml文件,您可以参考手册:https://logging.apache.org/log4j/2.x/manual/configuration.html
所以要使用版本
q9yhzks02#
下面的解决方案对我很有帮助。根据https://logging.apache.org/log4j/2.x/faq.html上提到的文档,我们必须将log4jxml重命名为log4j2.xml,因为这是新的命名约定,并将其放置在src/main/resources中。在我的情况下,这个问题在我这样做后就得到了解决。