SpringBoot_日志-SpringBoot日志关系

在我们这个starter-logging里面,依赖了这么多,而logback就是我们日志的实现,logback-core,使用logback进行日志记录,使用logback记录日志,这是一个日志实现,然后他还导了jul-to-log4j,log4j-over-slf4j,jcl-over-slf4j,这几个是什么,这几个就是把其他几个日志框架,他的作用就是呢,把其他日志转为slf4j的相关依赖,他就是将其他框架转成slf4j的,由于logback都依赖slf4j,所以slf4j也导入进来,导入了日志抽象层slf4j,其实就和我们之前看slf4j官方文档一样,这是我们springboot在底层日志依赖关系,我们springboot底层依赖关系,那用一句话总结,springboot底层也是用slf4j加logback的方式,进行日志记录,第二个,他除了导入slf4j+logback以外,还导了jul-to-slf4j,log4j-over-slf4j,都是把什么东西变成slf4j,slf4j在后边,把前边的日志框架变成slf4j,这就是我们在解决遗留问题的时候,我们应用要用log4j+logback,可能有其他依赖,我们都把这个都替换成slf4j,因为springboot也考虑到了其他日志,Springboot也把其他日志替换成了slf4j,他导了中间的替换包,中间替换包是什么东西,我们来给大家随便看一个,比如我们就以jcl-over-slf4j为例,虽然我们的jar包叫jcl-over-slf4j,但是里面的类名,叫org.apache.commons.logging,相当于commons-logging类都在里面,只不过这个类我们点进去看一下,我们在用的时候比如,日志工厂static LogFactory logFactory = new SLF4JLogFactory();我们new的是啥,是SLF4JLogFactory,也就是他在底层偷梁换柱了一下,虽然看起来是org.apache.commons.logging下的LogFactory,但是LogFactory在内部使用的是SLF4JLogFactory,他们就是偷梁换柱包,这里举一个例子放到里面就行了,剩下的一样,都可以看到类似的逻辑,你都可以看到类似的逻辑,比如你看log4j-over-slf4j,log4j转成slf4j,org.apache.log4j这个包名又是apache.log4j,但是真正用的时候,在Logger类里边,要进行日志记录,我们把这个点进去/*** Delegates to {@link org.slf4j.Logger#trace(String)} method in SLF4J.*/
public void trace(Object message) {differentiatedLog(null, LOGGER_FQCN, LocationAwareLogger.TRACE_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;}}
}他在日志记录的时候,他来看日志的级别,里面用的是谁的日志记录器,protected org.slf4j.Logger slf4jLogger;slf4j的日志记录,在日志记录的时候又是slf4j的,中间这些转换包,偷梁换柱,按你原来的方式替掉了,包名都不变一下的,这是我们中间的转换包

中间转换包,他就长成这样,中间包就是这个样子,那Springboot就考虑了中间转换的问题,所以唯一一个问题是什么,如果我们要引入其他的文件,我们在我们Springboot里面,我引入了其他框架,一定要把这个框架的默认日志依赖移除掉,假设框架里用的是log4j,类名包名一样不就出现问题了吗,我们这个jar包就冲突了,所以我们一定要移除掉,包括springboot也是这么做的,因为我们有一个疑问,spring框架用的是commons-logging,那spring排除了还是没有排除commons-logging,我们可以简单来看一下,我们来到这一块,我们引入了spring-boot-logging-stater,我们以后也就应该这么来做,我们引入新框架以后,springboot能够适配所有的日志,而且底层使用slf4j+logback记录日志,我们唯一需要做的是,引入其他框架的时候,只需要把其他框架的日志框架,排除掉,我们不用再做任何多余的操作,直接springboot就能适配起来,这就是springboot做日志的核心总结

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部