[英]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.