Atitit.日志系统slf4j的使用

Posted attilaxAti

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Atitit.日志系统slf4j的使用相关的知识,希望对你有一定的参考价值。

 

 

 

 

Atitit.日志系统slf4j的使用

 

 

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/C:/0workspace/AtiPlatf_cms/lib_slf1.7.5/slf4j-nop-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/C:/0workspace/AtiPlatf_cms/lib_slf1.7.5/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual binding is of type [org.slf4j.helpers.NOPLoggerFactory]

 

 

 

slf4j自动绑定实现类的方式基于约定:它要求你在实现类的包名和拿到LoggerFactory实例的文件路径必须是:org/slf4j/impl/StaticLoggerBinder.class

 

有了这个约定就好办了,slf4j在自己的基本类LoggerFactory里,直接调用实现类StaticLoggerBinder拿到LoggerFactory的实例

 

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 

汉字名:艾提拉(艾龙)   EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

 

 

slf4j的使用与绑定原理

前面介绍了slf4j的优势,本节介绍怎么使用slf4j以及其中的原理,前文说到了,单独的slf4j是不能工作的,必须带上其他具体的日志实现方案。就以apache的log4j作为具体日志实现方案为例,如果在工程中要使用slf4j作为接口,并且要用log4j作为具体实现方案,那么我们需要做的事情如下:(下面的xxx表示具体版本号)

· slf4j-api-xxx.jar加入工程classpath中;

· slf4j-log4jxx-xxx.jar加入工程classpath中;

· log4j-xxx.jar加入工程classpath中;

· log4j.properties(log4j.xml)文件加入工程classpath中。

介绍一下工作原理:

首先,slf4j-api作为slf4j的接口类,使用在程序代码中,这个包提供了一个Logger类和LoggerFactory类,Logger类用来打日志,LoggerFactory类用来获取Logger;slf4j-log4j是连接slf4j和log4j的桥梁,怎么连接的呢?我们看看slf4j的LoggerFactory类的getLogger函数的源码:

追踪到最后,发现LoggerFactory.getLogger()首先获取一个ILoggerFactory接口,然后使用该接口获取具体的Logger。获取ILoggerFactory的时候用到了一个StaticLoggerBinder类,仔细研究我们会发现StaticLoggerBinder这个类并不是slf4j-api这个包中的类,而是slf4j-log4j包中的类,这个类就是一个中间类,它用来将抽象的slf4j变成具体的log4j,也就是说具体要使用什么样的日志实现方案,就得靠这个StaticLoggerBinder类。再看看slf4j-log4j包种的这个StaticLoggerBinder类创建ILoggerFactory长什么样子:

 

可以看到slf4j-log4j中的StaticLoggerBinder类创建的ILoggerFactory其实是一个 org.slf4j.impl.Log4jLoggerFactory ,这个类的getLogger函数是这样的

 

就在其中创建了真正的 org.apache.log4j.Logger ,也就是我们需要的具体的日志实现方案的Logger类。就这样,整个绑定过程就完成

 

 

slf4j自动绑定实现类原理 - wangjuntytl的专栏 - 博客频道 - CSDN.NET.html

 

Atiend

 

 

以上是关于Atitit.日志系统slf4j的使用的主要内容,如果未能解决你的问题,请参考以下文章

slf4j日志系统

Atitit.log日志技术的最佳实践attilax总结

使用Slf4j集成Log4j2构建项目日志系统的完美解决方案

使用Slf4j集成Log4j2构建项目日志系统的完美解决方案

Java日志体系 —— 日志框架切换

Atitit php java python nodejs错误日志功能的比较