2015-10-05 80 views
1

我想檢查下面的一段代碼,我將它從LOG4J1.X遷移到LOG4J2。LOG4J1.x到LOG4J2

File f = new File(fullFilePath); 
Enumeration apps = logger.getAllAppenders(); 
if(!f.exists() || !apps.hasMoreElements()) 
{ 
logger.removeAllAppenders(); 
appender = new FileAppender(); 
appender.setName(fileName); 
logger.addAppender(appender); 
logger.setLevel(Level.toLevel(level)); 
} 

我能成功的代碼的其餘部分轉換爲log4j2,但是removeAllAppendersgetAllAppendersaddAppendersetLevel功能無法下log4j2可用。因此,我如何去替換它們?

+0

請參閱log4j2遷移指南。 https://logging.apache.org/log4j/2.x/manual/migration.html – ares

+0

謝謝,但我訪問的那個鏈接不回答我的問題 - @ares :)我堅持我無法工作的部分取代「getAllAppenders」等。 –

回答

1

在Log4j2中記錄器沒有直接附加到它們的附加器或過濾器。相反,它們與LoggerConfig相關聯。 LoggerConfig確實有一個setLevel方法,但更新它實際上不會修改任何使用它的Logger的級別。要做到這一點,你必須調用LoggerContext的updateLoggers方法。

LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false); 
Configuration config = loggerContext.getConfiguration(); 
// Note that the next method gets the LoggerConfig that best matches the 
// Logger name. If no logger 
LoggerConfig loggerConfig = config.getLoggerConfig(loggerName); 
Configurator.setLevel(loggerConfig, newLevel); 
loggerContext.updateLoggers(); 

就Appender而言,Appender不直接附加到LoggerConfig。相反,它們被AppenderControl包裝。您可以通過調用getAppenderRefs來獲取附加到LoggerConfig的Appender列表。然後你可以逐個刪除每個appender。

但是,不建議這樣做。像這樣添加和刪除Appender實際上只是爲了支持Log4j的單元測試。問題是,當你這樣做時,系統仍然在記錄,並且你將最終處於由於沒有配置appender而導致日誌事件丟失的狀態。 Log4j中推薦的方法是創建一個新配置,然後執行

Configurator.initialize(Configuration);