现有代码以编程方式设置记录器。多数民众赞成如何做到
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
方法不存在的错误。什么应该是替补。
答案 0 :(得分:0)
我担心使用slf4j
API无法实现这一点。
slf4j
是一个记录器外观API,只公开高级方法,如debug
,trace
等。它没有appender的概念,这是实现细节具体的基础测井记录,如log4j
。
摘自SLF4J FAQ:
SLF4J只是一个外观,这意味着它不提供完整的日志记录解决方案。使用SLF4J无法执行配置appender或设置日志记录级别等操作。因此,在某个时间点,任何非平凡的应用程序都需要直接调用底层日志记录系统。换句话说,独立应用程序无法完全独立于API底层日志记录系统。尽管如此,SLF4J还是将这种依赖性的影响降低到接近无痛的程度。
log4j2
API也是如此。
有哪些选择:
单独的代码部分,将与log4j
记录器耦合,并在那里进行必要的配置和验证。
另一种方法是在检查后将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");
}