0

现有代码以编程方式设置记录器。它就是这样做的

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

    //remaining code
}

现在,我已将logger对象从log4jlogger 更改为org.slf4j.Logger并收到该getAppender方法不存在的错误。这里的替代品应该是什么。

4

1 回答 1

0

恐怕使用slf4jAPI 是不可能的。

slf4j是一个记录器外观 API,仅公开高级方法,如debug,trace等。它没有附加程序的概念,这是具体底层日志记录的实现细节,如log4j.

摘自SLF4J 常见问题解答

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

log4j2API也是如此。

有什么选择:

  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");
    }
    
于 2018-05-05T10:58:10.207 回答