Почему тогда не используется <LoggerConfig>
вместо <Logger>
?
Я согласен, что наименование сбивает с толку, и я точно не знаю, почему вместо LoggerConfig
было использовано Logger
. Я предполагаю, что это было сделано для упрощения конфигурационного файла, поскольку вы никогда не настроите объект Logger
(LogManager
сделает это за вас), нет необходимости различать Logger
и LoggerConfig
в самом файле конфигурации, чтобы он был сокращен до Logger
.
как вы можете получить один Logger, указав корневой LoggerConfig
имя
Я полагаю, что ответ на ваш вопрос заключается в иерархической природе регистраторов. Вы можете иметь несколько Logger
экземпляров, совместно использующих один и тот же LoggerConfig
. Рассмотрим ситуацию, когда вы определяете LoggerConfig
(используя элемент Logger
в файле конфигурации) с именем пакета, например, com.my.package
. Предположим, у вас есть несколько классов в этом пакете, которые все пропускают Logger
через LogManager
путем явной или неявной передачи полного имени класса. Так что, может быть, у вас есть класс com.my.package.Class1
, а другой называется com.my.package.Class2
. Поскольку вы определили LoggerConfig
для com.my.package
, но не для com.my.package.Class1
(или Class2
), оба класса получат свой собственный экземпляр Logger
, но оба Logger
имеют одинаковые LoggerConfig
. Это также показано в примерах 3 и 4 на странице архитектуры log4j2 .