Java Log4j2 LogManager.getLogger()和Spring
我知道log4j logger实例应该是通过LogManager.getLogger()创建的,它执行一些反射魔法来检测调用类,因此这个名称对于特定的日志级别配置非常重要。 但是,如果我不喜欢手动创建记录器,并且希望它像类的所有其他依赖项一样使用spring注入,该怎么办?当这样做时,调用类当然不是依赖于记录器的类,而是spring(某个工厂)。因此,检测类名不再有效。 问题甚至更简单:log4j2类名检测是否以某种方式与IoC协同工作Java Log4j2 LogManager.getLogger()和Spring,java,spring,log4j2,Java,Spring,Log4j2,我知道log4j logger实例应该是通过LogManager.getLogger()创建的,它执行一些反射魔法来检测调用类,因此这个名称对于特定的日志级别配置非常重要。 但是,如果我不喜欢手动创建记录器,并且希望它像类的所有其他依赖项一样使用spring注入,该怎么办?当这样做时,调用类当然不是依赖于记录器的类,而是spring(某个工厂)。因此,检测类名不再有效。 问题甚至更简单:log4j2类名检测是否以某种方式与IoC协同工作 public class SomeClassWithDep
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;
}
}
公共类SomeClassWithDependencies{
私人最终受抚养人一名受抚养人一名;
私人最终记录器;
@注入
具有依赖项的公共类(
依赖一个依赖一个,
记录器(记录器){/Nevermind。我实际上意识到记录器应该被视为一种组合依赖项。因此,现在我总是为每个类手动创建一个记录器实例。如果我想隐藏具体的日志记录技术,我可以注入一些LoggerFactory,并仍然在构造函数中创建它,以使神奇的反射功能在g