如何使用IntelliJ和Gradle配置Log4j



我一定在做一些愚蠢的事情,但我找不到。我试图将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());
}
}

当我运行这个时,输出说根记录器的级别是"0";错误";,即使我将其设置为跟踪。当然,这意味着任何低于错误级别的日志语句都不会打印出来。

Print
Root Logger Level: ERROR

我读到的每一篇文档都说,属性文件需要位于类路径上的一个目录中,这是有道理的。根据gradle文档和我自己的调查,resources目录位于类路径上。在实验中,我尝试将文件放置在层次结构的每一个级别,没有任何差异。我看不出找不到属性文件的任何原因。

我尝试通过在VM参数中添加-Dlog4j.configuration=<full/path/to/properties>来直接指定它。这仍然没有起作用,但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()'.

这似乎发生在程序终止之后。我不确定它是否相关。

我一定错过了什么愚蠢的东西,但我什么都找不到。我看了几十个例子,似乎我做的每件事都很好。我错过了什么?

对于最初的问题,因为您正在尝试使用log4j2,所以首选的配置模式是xml文件。您可以参考手册:https://logging.apache.org/log4j/2.x/manual/configuration.html

所以要使用版本

System.setProperty(ConfigurationFactory.LOG4J1_CONFIGURATION_FILE_PROPERTY, "src/main/resources/configuration.xml");

下面的解决方案帮助了我https://logging.apache.org/log4j/2.x/faq.html,我们必须将log4jxml重命名为log4j2.xml,因为这是新的命名约定,并将其放在src/main/resources中。在我的情况下,这个问题一解决就解决了。

最新更新