2016-09-15 3 views
2

Я знаю, что экземпляр log4j-регистратора должен быть создан с помощью LogManager.getLogger(), который делает некоторую магию отражения, чтобы определить вызывающий класс, следовательно, имя, которое важно для конкретной конфигурации уровня журнала , Но что, если мне не нравится, что журнал должен быть создан вручную, и хотите, чтобы он был введен с использованием пружины, как и все другие зависимости класса? При этом вызывающий класс, конечно, не тот, который имеет зависимость от регистратора, это весна (какая-то фабрика). Таким образом, определение имени класса больше не работает. Вопрос может быть даже более простым: обнаружено ли определение имени класса log4j2 каким-то образом с IoC?Log4j2 LogManager.getLogger() с 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

Nevermind. Я действительно понял, что регистратор должен рассматриваться как композиционная зависимость. Итак, теперь я всегда создаю экземпляр журнала вручную для каждого класса. В случае, если я хочу скрыть конкретную технологию каротажа, я мог бы добавить некоторый LoggerFactory и все равно создать его внутри конструктора, чтобы сделать работу волшебного отражения.

Смежные вопросы