包装 slf4j API

2023-12-25

我想将 slf4j 与 Logback 改造为遗留应用程序。好处是,遗留应用程序有自己的日志框架。所以我所要做的就是更改日志框架以记录到 slf4j 而不是 log4j。

这就像做梦一样。我很高兴,直到我注意到 Logback 为每个日志事件记录的位置:

Logger.java:...

哎呀!当我试图找出日志事件的来源时,这对我的开发人员同事没有多大帮助。

我如何告诉 Logback 在堆栈中向上查找几级以查找要记录的实际位置?

记录器类是一个实用程序类,具有如下方法:

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

查看源码找到了解决方案jcl-over-slf4j。 slf4j 的大多数实现(包括 logback)使用实现LocationAwareLogger,它有一个 log 方法,需要包装记录器类的完全限定类名作为其参数之一:

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);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

包装 slf4j API 的相关文章

随机推荐