2016-09-04 44 views
0

我試圖通過下面的代碼來實現基本的配置Log4j的-2.6.2基本配置沒有配置記錄等級

package com.myapp.loggingutilities; 

import org.apache.log4j.Level; 
import org.apache.log4j.Logger; 
import org.apache.log4j.BasicConfigurator; 

public class LoggingUtilitiesApplication { 
    static Logger currentLogger = Logger.getLogger(LoggingUtilitiesApplication.class); 

    public static void main(String[] args) { 
     BasicConfigurator.configure(); 
     currentLogger.debug("Application Started here"); 
     LoggerUtilityModel bar = new LoggerUtilityModel(); 
     bar.doIt(); 
     currentLogger.debug("Application ended"); 

    } 
} 

bar類DEF是

package com.myapp.loggingutilities; 
import org.apache.log4j.Logger; 

public class LoggerUtilityModel { 
    static Logger modelLogger = Logger.getLogger(LoggerUtilityModel.class); 

    public void doIt() { 
     modelLogger.debug("OPPS! DID IT AGAIN"); 
    } 

} 

我使用Log4j2並且分配採取了here。我總是得到SLF4J橋錯誤,當我有Log4j的到SLF4J和實施罐子在構建路徑:

Exception in thread "main" java.lang.ExceptionInInitializerError 
Caused by: java.lang.ClassCastException: org.apache.logging.slf4j.SLF4JLoggerContext cannot be cast to org.apache.logging.log4j.core.LoggerContext 
    at org.apache.log4j.Logger$PrivateManager.getContext(Logger.java:59) 

當我把他們趕走,這是不錯。但日誌消息沒有被打印

我認爲BasicConfigurator應該配置DEBUG的根記錄器,所以我所有的日誌語句應該通過(即任何關於或高於DEBUG級別)。但是當我運行該應用程序時,在控制檯上看不到任何日誌消息。我錯過了什麼?

+0

我剛剛運行了你的代碼,並在控制檯中用'DEBUG'級別獲得了消息。 – DimaSan

+0

@DimaSan我碰巧從我的構建路徑中刪除了slf4j綁定jar,因爲他們在抱怨衝突 - 你也這樣做了嗎? – ha9u63ar

+0

我認爲問題在於缺少'slf4j'罐子,因爲我使用已經包含它的Spring Boot運行你的代碼。 – DimaSan

回答

0

該問題似乎是爲log4j2.6.2設置的LEVEL級別。根據Apache的Log4J-2.6.2文檔,所有的默認日誌消息都是爲DEBUG設置的。

此外,您不能使用根記錄器更改日誌記錄級別。您需要根據記錄器更改它。一切都默認爲錯誤。

1

BasicConfigurator是log4j的1.2類,不能用來配置Log4j基本上,一切都在org.apache.log4j包是Log4j的1.2(舊),一切都在org.apache.logging.log4j namespace是Log4j的2

如果你是對Log4j 2的編程配置感興趣,請參閱the manual page。就我個人而言,我發現新的簡化的XML配置文件格式最容易使用。

您所看到的行爲(僅限於ERROR級別的控制檯日誌記錄)是Log4j 2的「默認配置」,如果它找不到配置文件並且尚未手動配置,則會執行此操作。

+0

@RemkoPompa謝謝你的迴應。但它仍然沒有意義,爲什麼1.2 DEBUG和2.x有錯誤。我期待這個理由被記錄在某處。也, – ha9u63ar