簡體   English   中英

使用Spring的Log4j2 LogManager.getLogger()

[英]Log4j2 LogManager.getLogger() with Spring

我知道log4j logger實例應該通過LogManager.getLogger()創建,它執行一些反射魔法來檢測調用類,因此這個名稱對於特定的日志級別配置很重要。 但是,如果我不喜歡手動創建記錄器並希望像使用類的所有其他依賴項一樣使用spring注入它,該怎么辦? 當這樣做時,調用類當然不是對記錄器具有依賴性的那個,它是spring(某些工廠)。 因此,檢測班級名稱不再有效。 問題甚至可以更簡單:log4j2類名檢測是否與IoC一起使用?

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;
    }
}

沒關系。 我實際上意識到記錄器應該被視為一種組合依賴。 所以現在我總是每個類手動創建一個logger實例。 如果我想隱藏具體的日志記錄技術,我可以注入一些LoggerFactory並仍然在構造函數中創建它,以使魔術反射的東西工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM