其中是logger.getAppender(从log4j迁移到slf4j + log4j)

时间:2018-05-03 17:57:18

标签: logging log4j slf4j log4j2 slf4j-api

现有代码以编程方式设置记录器。多数民众赞成如何做到

public void init (String logFile, Logger logger){
    Validate.isTrue(logger.getAppender(APPENDER_NAME) == null, "Logger has configured project appender");

    //remaining code
}

现在,我已将logger对象从log4j记录器更改为org.slf4j.Logger,并收到getAppender方法不存在的错误。什么应该是替补。

1 个答案:

答案 0 :(得分:0)

我担心使用slf4j API无法实现这一点。

slf4j是一个记录器外观API,只公开高级方法,如debugtrace等。它没有appender的概念,这是实现细节具体的基础测井记录,如log4j

摘自SLF4J FAQ

  

SLF4J只是一个外观,这意味着它不提供完整的日志记录解决方案。使用SLF4J无法执行配置appender或设置日志记录级别等操作。因此,在某个时间点,任何非平凡的应用程序都需要直接调用底层日志记录系统。换句话说,独立应用程序无法完全独立于API底层日志记录系统。尽管如此,SLF4J还是将这种依赖性的影响降低到接近无痛的程度。

log4j2 API也是如此。

有哪些选择:

  1. 单独的代码部分,将与log4j记录器耦合,并在那里进行必要的配置和验证。

  2. 另一种方法是在检查后将slf4j记录器转换为log4j

    // log4j 1.x
    if (logger instanceof org.apache.logging.log4j.core.Logger) {
       org.apache.log4j.Logger log4j = (org.apache.log4j.Logger) logger;
       // access to log4j.getAppender("APPENDER_NAME");
    }