2015-04-23 174 views
0

我正在使用Spring,log4j和slf4j。在嘗試從@PostConstruct註解中記錄一些信息時,log4j抱怨尚未初始化。當我以後從這個類登錄時,log4j工作正常。當從@PostConstruct註解方法調用記錄器時,Log4j未初始化

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

@PostConstruct 
public void init() { 
    log.info("initializing service"); 
} 

輸出
的log4j:WARN否追加程序可以找到的記錄器(mypackage.MyClass)

Log4j配置是AA基於文件的一個:

log4j.rootLogger=INFO, console 
log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern=%d %-5p %c %x - %m%n 

回答

1

PostConstruct方法在依賴注入完成後立即被Spring容器調用,但是在init方法之前。所以在構建後的類實例中沒有完全初始化。我建議爲此使用InitializingBeaninit-method

+0

我不想爲特定於spring的'init-method'切換標準的Java註釋,所以這個問題可以改寫爲'如何讓Spring加載log4j.properties資源?'。 –

+0

由於您必須將類傳遞給LoggerFactory方法,因此您需要先將此類初始化。所以我不認爲你可以做得更早,你可以嘗試做'log'變量非靜態。 – androberz

相關問題