簡體   English   中英

如何使用 IntelliJ 和 Gradle 配置 Log4j

[英]How to configure Log4j with IntelliJ and Gradle

我一定在做一些愚蠢的事情,但我找不到它。 我正在嘗試將 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

構建.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

主程序

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());
    }
}

當我運行它時,輸出表明根記錄器的級別為“錯誤”,即使我將其設置為跟蹤。 當然,這意味着不會打印任何低於錯誤級別的日志語句。

Print
Root Logger Level: ERROR

我閱讀的每一份文檔都說屬性文件需要位於類路徑上的目錄中,這是有道理的。 根據 gradle 文檔和我自己的調查,資源目錄在類路徑上。 實驗上,我嘗試將文件放置在層次結構的每個級別,沒有任何區別。 我看不出為什么找不到屬性文件的任何原因。

我嘗試通過將-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()'.

這似乎發生在程序終止后。 我不確定它是否相關。

一定錯過了一些愚蠢的東西,但我找不到任何東西。 我看過幾十個例子,似乎我做的一切都是正確的。 我錯過了什么?

對於最初的問題,因為您嘗試使用 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/資源。就我而言,只要我這樣做,這個問題就解決了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM