如何使用IntelliJ和Gradle配置Log4j

nc1teljy  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(335)

我一定是做了什么蠢事,但我找不到它。我试图将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()'.

这似乎是在程序终止后发生的。我不确定这是否相关。
我 * 一定 * 错过了什么愚蠢的事情,但我什么都找不到。我看了几十个例子,似乎我做的每件事都是正确的。我错过了什么?

oyxsuwqo

oyxsuwqo1#

对于原问题,由于您尝试使用log4j2,因此首选的配置方式是xml文件,您可以参考手册:https://logging.apache.org/log4j/2.x/manual/configuration.html
所以要使用版本

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

q9yhzks02#

下面的解决方案对我很有帮助。根据https://logging.apache.org/log4j/2.x/faq.html上提到的文档,我们必须将log4jxml重命名为log4j2.xml,因为这是新的命名约定,并将其放置在src/main/resources中。在我的情况下,这个问题在我这样做后就得到了解决。

相关问题