log4j2獲取方法和行號的原理?
首先介紹下log4j2中的幾個重要的概念
LoggerContext
LoggerContext在Logging System中扮演了錨點的角色。根據情況的不同,一個應用可能同時存在于多個有效的LoggerContext中。在同一LoggerContext下,log system是互通的。如:Standalone Application、Web Applications、Java EE Applications、”Shared” Web Applications 和REST Service Containers,就是不同廣度范圍的log上下文環境。
Configuration
每一個LoggerContext都有一個有效的Configuration。Configuration包含了所有的Appenders、上下文范圍內的過濾器、LoggerConfigs以及StrSubstitutor.的引用。在重配置期間,新與舊的Configuration將同時存在。當所有的Logger對象都被重定向到新的Configuration對象后,舊的Configuration對象將被停用和丟棄。
Logger
Loggers 是通過調用LogManager.getLogger方法獲得的。Logger對象本身并不實行任何實際的動作。它只是擁有一個name 以及與一個LoggerConfig相關聯。它繼承了AbstractLogger類并實現了所需的方法。當Configuration改變時,Logger將會與另外的LoggerConfig相關聯,從而改變這個Logger的行為。
LoggerConfig
每個LoggerConfig和logger是對應的,獲取到一個logger,寫日志時其實是通過LoggerConfig來記日志的