日志转调
简介
当我们应用配置了slf4j
&&logback
的组合,但是我们引用的jar
包里面用的却用了Log4j来执行日志输出,那么怎么统一控制,让jar
包里面的的日志也能按照我们工程配置的日志输出格式输出呢?日志转调这个时候就可以大显身手了
解析
以log4j转调为例,依赖转调包log4j-over-slf4j.jar
,这个jar
包创建了大部分log4j.jar
里面的类(类名包名都保持一致,但是实现不一样),关键是对Logger
类和其父类Category
的重新创建.
重写过后的Category
类增加了对org.slf4j.Logger
的引用,并且在创建Logger
的时候同时创建对应的org.slf4j.Logger
public class Category {
public void info(Object message) {
differentiatedLog(null,CATEGORY_FQCN,LocationAwareLogger.INFO_INT,
message, null);
}
void differentiatedLog(Marker marker, String fqcn, int level,
Object message, Throwable t) {
String m = convertToString(message);
if (locationAwareLogger != null) {
locationAwareLogger.log(marker, fqcn, level, m, null, t);
} else {
switch (level) {
case LocationAwareLogger.TRACE_INT:
slf4jLogger.trace(marker, m);
break;
case LocationAwareLogger.DEBUG_INT:
slf4jLogger.debug(marker, m);
break;
case LocationAwareLogger.INFO_INT:
slf4jLogger.info(marker, m);
break;
case LocationAwareLogger.WARN_INT:
slf4jLogger.warn(marker, m);
break;
case LocationAwareLogger.ERROR_INT:
slf4jLogger.error(marker, m);
break;
}
}
}
}
当调用logger.info
的时候再内部实际调用的是slf4jLogger.info()
;
小结
log4j-over-slf4j
是通过重新创建log4j.jar
里面的类来实现转调
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。