首页 文章

包装slf4j API

提问于
浏览
7

我想用Logback将slf4j改造成遗留应用程序 . 好的是,遗留应用程序有自己的日志框架 . 所以我所要做的就是改变日志框架以登录到slf4j而不是log4j .

它就像一场梦 . 我很高兴,直到我注意到为每个日志事件记录的Logback位置:

Logger.java:...

哎呀!在试图弄清楚日志事件的来源时,这对我的开发人员来说无济于事 .

如何告诉Logback在堆栈中查看实际位置的几个级别?

logger类是一个实用程序类,其方法如下:

public static void debug(String clazz, String message) {
    org.slf4j.Logger logger = LoggerFactory.getLogger(clazz);
    logger.debug(message);
}

2 回答

  • 12

    找到了解决 jcl-over-slf4j 来源的解决方案 . slf4j的大多数实现(包括logback)使用实现 LocationAwareLogger 的 Logger ,它具有一个log方法,该方法期望包装 Logger 类的完全限定类名作为其中一个参数:

    private static final String FQCN = Logger.class.getName();
    
    
    public static void debug(String clazz, String message) {
        org.slf4j.Logger logger = LoggerFactory.getLogger(clazz);
        if (logger instanceof LocationAwareLogger) {
            ((LocationAwareLogger) logger).log(null, FQCN, LocationAwareLogger.DEBUG_INT, message, null, null);
        } else {
            logger.debug(message);
        }
    }
    
  • 5

    有关如何执行此操作,请参阅各种XXX-over-slf4j实现 .

    基本上,您希望完全替换当前的 Logger 框架 . 不包装slf4j .

    编辑:

    另一种方法可能是编写您自己的布局子类化您现在使用的布局,它具有修改后的%m,%l等字段的含义,它会跳过额外的堆栈帧 .

相关问题