Java 日志体系

Java 日志体系

《java 日志和 SLF4J 随想》:http://ifeve.com/java-slf4j-think/

一、常用的日志组件

名称 jar 描述
log4j log4j.jar 早期常用日志组件
log4j2 log4j.log4j-api.log4j-core.jar apache 开发的一款 log4j 的升级产品
logback logback-core.jar、logback-classic.jar、logback-access.jar 一套日志组件的实现,性能优于 log4j(slf4j阵营)
java.util.logging jdk jdk1.4 实现
jcl commons-logging.jar 日志门面,已停止更新
slf4j slf4j-api.jar 日志门面

现今,Java 日志领域被划分为两大阵营:Commons Logging 阵营和 SLF4J 阵营,但 SLF4J 的发展趋势更好。

先说明下日志简称:

  • jdk 自带的 logging -> 简称 jul (java-util-logging)
  • apache commons-logging -> 简称 jcl
  • logback -> slf4j

二、jcl

Commons Logging 阵营只支持 log4j、jul、simplelog 三种日志,jul 由 JDK1.4 实现,log4j 是 Apache 的一个早期的项目,simplelog 是 Commons Logging 自己实现的一个简单日志(JDK1.1 时有效)。优先级别为 log4j > jul > simplelog。

JCL 日志系统

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>
<!-- 根据需要引入 log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

三、slf4j

slf4j 官网:https://www.slf4j.org/

slf4j 日志系统

3.1 如何在项目中使用 slf4j

如果要在项目中使用 slf4j,一般需要引入三个 jar 包:一是 slf4j-api.jar 接口;二是具体实现包;三是桥接包。

jar 包名 作用
slf4j-log4j12-1.7.13.jar log4j1 桥接器,你需要将log4j.jar加入classpath。
slf4j-jdk14-1.7.13.jar java.util.logging 的桥接器,JDK原生日志框架。
slf4j-nop-1.7.13.jar NOP 桥接器,默默丢弃一切日志。
slf4j-jcl-1.7.13.jar Commons Logging 的桥接器. 这个桥接器将 SLF4j 所有日志委派给 JCL。
logback-classic-1.0.13.jar(requires logback-core-1.0.13.jar) slf4j 的原生实现,logback 直接实现了 slf4j 的接口,因此使用 slf4j 与 logback 的结合使用也意味更小的内存与计算开销

如要在项目中使用 log4j2 则需要引入以下 jar 包:

<!-- slf4j -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>
<!-- log4j2 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.2</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.8.2</version>
</dependency>
<!-- log4j2 的桥接包 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.8.2</version>
</dependency>

3.2 如何桥接遗留的 api

如果项目是很久之前开发的,如何将其引导到 slf4j 上,这是就需要引入对应的适配包。

jar 包名 作用
log4j-over-slf4j-version.jar 将 log4j 重定向到 slf4j
jcl-over-slf4j-version.jar 将 commos logging 重定向到 slf4j
jul-to-slf4j-version.jar 将 java.util.logging 重定向到 slf4j

如 log4j:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>log4j-over-slf4j</artifactId>
    <version>1.7.25</version>
</dependency>

3.3 注意事项

同一个日志系统不能现时出现桥接器和适配器,即:

  1. log4j-over-slf4j.jar 和 slf4j-log4j12.jar 不能同时存在
  2. jul-to-slf4j.jar 和 slf4j-jdk14.jar 不能同时存在
  3. jcl-over-slf4j.jar 和 slf4j-jcl.jar 不能同时存在

参考:

  1. 《Java常用日志框架介绍》:https://www.cnblogs.com/chenhongliang/p/5312517.html
  2. 《log4j2 官网》:http://logging.apache.org/log4j/2.x/manual/migration.html
  3. 《logback 官网》:https://github.com/qos-ch/logback
  4. 《logback的使用和logback.xml详解》:https://www.cnblogs.com/warking/p/5710303.html

每天用心记录一点点。内容也许不重要,但习惯很重要!

posted on 2018-10-22 06:57  binarylei  阅读(695)  评论(0编辑  收藏  举报

导航