我想用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);
}
答案 0 :(得分:12)
找到了解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);
}
}
答案 1 :(得分:5)
请参阅各种XXX-over-slf4j实现,了解如何执行此操作。
基本上,您希望完全替换当前的记录器框架。不包装slf4j。
编辑:
另一种方法可能是编写自己的布局子类化现在使用的布局,它具有修改后的%m,%l等字段的含义,它会跳过额外的堆栈帧。