java日志框架介绍

日志框架总体概览

在这里插入图片描述
一般情况下,推荐使用这种方式。用户使用日志接口commons-logging或slf4j通过桥接调用日志框架实现,而不是直接使用日志框架实现。这样的好处就是在切换日志实现时不需要更改代码只需替换相应配置和jar包。
commons-logging我未直接使用过不做介绍,以下内容主要介绍slf4j。

slf4j与各日志框架桥接

这里使用slf4j官网的一张图片来解释。
在这里插入图片描述
从张图可以看出由于logback是直接实现的slf4j接口的所以不需要桥接jar包,其他日志框架都是需要桥接jar包。每个桥接jar的名字图中都有说明。这张图中没有log4j2,所以log4j2接下来会单独说明一下。
使用log4j2需要使用以下两个jar包(在Web项目中需要添加 log4j-web jar包):
  log4j-api
  log4j-core
slf4j到log4j2的桥接jar有些特殊,引用apache官网的说法:

Due to a break in compatibility in the SLF4J binding, as of release 2.11.1 two SLF4J to Log4j Adapters are provided.
log4j-slf4j-impl should be used with SLF4J 1.7.x releases or older.
log4j-slf4j18-impl should be used with SLF4J 1.8.x releases or newer.

翻译过来就是由于兼容性问题,SLF4J 1.7.x 及以前版本使用log4j-slf4j-impl jar包,SLF4J 1.8.x 及以后的版本使用log4j-slf4j18-impl jar包。参考链接

各日志框架重定向回slf4j

存在这种场景的主要原因在于:项目中某些依赖的部件可能直接使用的某种固定日志框架实现。slf4j提供了一系列jar包将这些日志实现重定向回slf4j,然后再通过你项目中使用的日志框架打印日志。同样使用slf4j官网的一张图来解释。在这里插入图片描述
实现方式:这些重定向jar包使用的最直接的方式,创建与该日志框架全限定名相同的类,在其中直接调用slf4j。因此使用重定向jar包后就不需要以前日志框架实现jar包,换句话说就是你的项目中只应当有一个日志框架实现。参考链接
同样的这张图依旧没有画出log4j2,log4j2需要使用的jar包是log4j-to-slf4j-2.x.jar,但是对于性能问题Apache有一句比较含糊的话。链接

The Log4j 2 to SLF4J Adapter allows applications coded to the Log4j 2 API to be routed to SLF4J. Use of this adapter may cause some loss of performance as the Log4j 2 Messages must be formatted before they can be passed to SLF4J. With Log4j 2 as the implementation these would normally be formatted only when they are accessed by a Filter or Appender.

特别提醒

某个日志框架重定向到slf4j jar包和slf4j桥接到该日志框架jar不应该同时出现在你的项目中否则会造成StackOverflowError。比如log4j-to-slf4j-2.x.jar和log4j-slf4j-impl-2.x.jar不应该同时出现,虽然可以通过调整jar包加载顺序解决但是实在不应当出现这种情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值