2017-04-12 31 views
-1

我需要定期追加短信到一個文本文件,我想搭載log4j讓生活變得輕鬆。所以我創建了一個帶有DailyRollingFileAppender的「mylog.properties」文件 - 沒有什麼不尋常的 - 我已經將該文件放在我的src/java/resources目錄中。所以,現在我已經準備好創建這個文件中的記錄,並開始使用它登錄,是這樣的:如何使用自定義log4j.properties文件進行私人日誌記錄?

class MyClass { 
    private static final Logger myLog = getLoggerConfiguredFromPropertiesFile("mylog.properties"); 

    public void logSomething(String message) { 
     myLog.info(message); 
    }  
} 

那麼會是什麼邏輯getLoggerConfiguredFromPropertiesFile

感謝, 阿爾瓦羅

+0

Log4j使用全局數據。在應用程序中不能使用多個Log4j實例(不使用多個類加載器,而這對於此來說是完全過度的)。按照打算使用Log4j的方式使用Log4j,或者使用其他方法。 – Andreas

+0

我明白了,所以問題是Log4j有靜態數據。這太糟糕了,因爲我真的可以使用DailyRollingFileAppender的功能。 –

回答

0

這樣做:

private static final Logger myLog = Logger.getLogger(MyClass.class)

應該把工作做好。 log4j會自動尋找類的最接近的log4j.properties,如果在項目中只有一個,那就是那個。另外,請致電您的文件log4j.properties,而不是mylog.properties

+0

謝謝,但我感興趣的解決方案是一個記錄器的本地實例,我可以使用其自己的屬性文件進行配置並僅在此處使用。像往常一樣,該應用的其餘部分將使用全局記錄器。顯然它不適用於Log4j :-( –

+1

@AlvaroMendez它是可行的,但不是你說的方式。一個且唯一的log4j配置文件('log4j.properties')可以從'MyClass記錄到另一個文件中,這樣當MyClass記錄一條消息時,它只會記錄在備用文件中(使用'DailyRollingFileAppender'),而不是記錄在主日誌文件中,通過將「additivity」設置爲false來實現。看到問題:[Log4j配置 - 不同的日誌到不同的文件](http://stackoverflow.com/q/23322602/5221149) – Andreas

0

我想出了一個替代方案,我使用的是常規的記錄:

private static final Logger myLog = LoggerFactory.getLogger(MyClass.class); 

而在log4j.properties,我配置自定義DailyRollingFileAppender,只是我的類的工作,爲解釋here

相關問題