我知道应该通过LogManager.getLogger()创建一个log4j logger实例,该实例执行一些反射魔法来检测调用类,因此该名称对于特定的日志级别配置很重要。 但是,如果我不喜欢手动创建记录器并希望像使用类的所有其他依赖项一样使用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;
}
}
答案 0 :(得分:0)
没关系。我实际上意识到记录器应该被视为一种组合依赖。所以现在我总是每个类手动创建一个记录器实例。如果我想隐藏具体的日志记录技术,我可以注入一些LoggerFactory并仍然在构造函数中创建它,以使魔术反射的东西工作。