【问题标题】:Log4j2 LogManager.getLogger() with SpringLog4j2 LogManager.getLogger() 与 Spring
【发布时间】:2017-01-23 20:12:12
【问题描述】:

我知道应该通过 LogManager.getLogger() 创建一个 log4j 记录器实例,它执行一些反射魔法来检测调用类,因此该名称对于特定日志级别配置很重要。 但是,如果我不喜欢手动创建记录器并希望它像类的所有其他依赖项一样使用 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;
    }
}

【问题讨论】:

    标签: java spring log4j2


    【解决方案1】:

    没关系。我实际上意识到应该将记录器视为一种组合依赖。所以现在我总是为每个类手动创建一个记录器实例。如果我想隐藏具体的日志记录技术,我可以注入一些 LoggerFactory 并仍然在构造函数中创建它以使神奇的反射工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-04
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 2020-12-02
      • 2019-11-14
      • 2017-05-26
      相关资源
      最近更新 更多