java 的 logger 太多东西了无法解释为什么就稍微进行了整理
稍微介绍一下 java 处理 log 的东西
特别是 slf4j 的种类太多,或许也没有人能很好的说明各自用处。产生混乱的原因有七成是由 slf4j 造成的。这种混乱的局面进行了简单整理。主要分为三个类型的 jar。
1、 接口(Interface)
主要有这些
- commons-logging
- slf4j
他们也就只提供了接口的功能,并没实现 log 的输出功能。
接口要是太老的话,自己提供的功能也会有不足的地方。这些 jar 虽然含有有 log 输出的功能,但只是简单的实现。
2、 适配器(Adapter)
主要有这些
- jcl-over-slf4j.XXX.jar(把 commons-logging 的处理交给 slf4j 来处理)
- jul-to-slf4j.XXX.jar(把 java.util.logging 的处理交给 slf4j 来处理)
- log4j-over-slf4j.XXX.jar(把 log4j 的处理交给 slf4j 来处理)
适配器的作用是,代理各接口与实际处理 logger 的任务。从外部看起来都是相同的方法,但是内部却是各自来实现自己的功能。除了处理 log 之外,也有『slf4j-jdk14』这样的兼容不同 JDK 版本来处理的适配器。正因为有了适配器,即使在 commons-logging、log4j 中追加了 slf4j 的时候也能进行工作。
适配器通过设置文件来进行适配,log4j.jar 不存在的时候会读取 log4j.xml 文件。适配器是很认真的来工作的。但是因为有了适配器来进行各种处理,这也是造成了 jar 文件混乱而使得 log 的输出复杂的原因。
另外,「jul」是「java.util.logging」の简称,「jcl」是「Jakarta Commons Logging」的简称而不是「Java Class Library」的简称。这些简称的理解困难也是造成 log 的输出复杂的原因之一。