2016-09-15 134 views
2

我知道一個log4j記錄器實例應該是通過LogManager.getLogger()創建的,它執行一些反射魔術來檢測調用類,因此對於特定日誌級別配置。 但是,如果我不喜歡手動創建記錄器並希望像使用類的所有其他依賴項一樣使用彈簧進行注入?當這樣做的時候,調用類當然不是那種依賴於記錄器的類,它是彈簧(某些工廠)。因此,檢測類名稱不再起作用。 問題甚至可以更簡單:log4j2類名稱檢測是否可以與IoC協同工作?Log4j2 LogManager.getLogger()with Spring

public class SomeClassWithDependencies { 
    private final DependencyOne dependencyOne; 
    private final Logger logger; 

    @Inject 
    public SomeClassWithDependencies(
       DependencyOne dependencyOne, 
       Logger logger) { // <- this is created by spring and operates on the name of some spring factory instead of SomeClassWithDependencies 
     this.dependencyOne = dependencyOne; 
     this.logger = logger; 
    } 
} 

回答

0

沒關係。我實際上意識到一個記錄器應該被認爲是一種構圖依賴。所以現在我總是爲每個類手動創建一個記錄器實例。如果我想隱藏混凝土日誌記錄技術,我可以注入一些LoggerFactory,並在構造函數中創建它,以使魔法反射的東西起作用。