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。

<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/

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

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

Java 日志体系的更多相关文章

  1. java 日志体系目录

    java 日志体系目录 1.1 java 日志体系(一)log4j1.log4j2.logback.jul.jcl.slf4j 1.2 java 日志体系(二)jcl 和 slf4j 2.1 java ...

  2. java 日志体系(四)log4j 源码分析

    java 日志体系(四)log4j 源码分析 logback.log4j2.jul 都是在 log4j 的基础上扩展的,其实现的逻辑都差不多,下面以 log4j 为例剖析一下日志框架的基本组件. 一. ...

  3. java 日志体系(三)log4j从入门到详解

    java 日志体系(三)log4j从入门到详解 一.Log4j 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...

  4. Java 日志体系(二)jcl 和 slf4j

    Java 日志体系(二)jcl 和 slf4j <java 日志体系(一)统一日志>:https://www.cnblogs.com/binarylei/p/9828166.html &l ...

  5. java日志体系的思考(转)

    Java 日志缓存机制的实现 Java 日志管理最佳实践 混乱的 Java 日志体系 log日志远程统一记录 浅谈后端日志系统 Java异常处理和接口约定 用SLF4j/Logback打印日志-1 用 ...

  6. 混乱的 Java 日志体系

    混乱的 Java 日志体系 2016/09/10 | 分类: 基础技术 | 0 条评论 | 标签: LOG 分享到: 原文出处: xirong 一.困扰的疑惑 目前的日志框架有 jdk 自带的 log ...

  7. Java日志体系居然这么复杂?——架构篇

    本文是一个系列,欢迎关注 日志到底是何方神圣?为什么要使用日志框架? 想必大家都有过使用System.out来进行输出调试,开发开发环境下这样做当然很方便,但是线上这样做就有麻烦了: 系统一直运行,输 ...

  8. 【原创】架构师必备,带你弄清混乱的JAVA日志体系!

    引言 还在为弄不清commons-logging-xx.jar.log4j-xx.jar.sl4j-api-xx.jar等日志框架之间复杂的关系而感到烦恼吗? 还在为如何统一系统的日志输出而感到不知所 ...

  9. Java日志体系(五)logback

    1.1 简介 师出同门,与log4j一样,logback也是由Ceki Gülcü开发的开源日志组件,可以说是log4j的改进版:在现如今的项目中,logback的出现次数越来越多,是目前主流首选的日 ...

随机推荐

  1. centos7下安全访问远程服务器

    1. 添加普通账号 众所周知,linux下的root拥有最高权限,可以执行任何命令.在使用root身份操作时,有时的一个不注意就可能将非常重要的删除(最可怕的是 rm -rf /).而linux不像w ...

  2. Python【每日一问】03

    问:请给出下列代码的执行结果,并解释 a = dict.fromkeys([6, 7, 8], ["testing", {"name": "ken&q ...

  3. 当一个HTML元素需要添加mouseon、mouseout与click事件,或者mouserenter、mouseleave和click事件时,click事件无法触发

    当一个HTML元素需要添加mouseon.mouseout与click事件,或者mouserenter.mouseleave和click事件时,click事件无法触发 针对上述问题,我遇到的有两种情况 ...

  4. Problem C: 重复子串(string)

    /* 一个性质? right集合中只有相邻的位置才会有用 那么考虑set启发式合并, 能够求出大概nlogn个有用的对 那么将这些对按照右端点排序, 查询也按照右端点排序就可以离线维护信息 然后需要维 ...

  5. exchang2010OWA主界面添加修改密码选项

    原文链接:http://www.mamicode.com/info-detail-1444660.html exchange邮箱用户可以登录OWA修改密码,当AD用户密码过期或者重置密码勾选了“用户下 ...

  6. 学习excel的使用技巧二批量复制

    1 选中要操作的部分 2 CTRL+G 打开定位 3 点击 定位条件 4 选择空值 5 输入=号  然后键盘的 方向键  向上 6 按住CTRL+回车 即可实现  批量复制

  7. Spring MVC 之 ContentNegotiatingViewResolver

    我们已经知道 对于 RequestMappingInfoHandlerMapping, 它在对带有后缀的http 请求进行匹配的时候,如果找不到精确的pattern, 那么就会 pattern+.* ...

  8. 李清华201772020113《面向对象程序设计(java)》第二周学习总结

    李清华201772020113<面向对象程序设计(java)>第二周学习总结 第一部分 理论知识 第三章 本章主要讲了java基本知识中的标识符,关键字,注释,以及数据类型,变量,运算符, ...

  9. __getattr__ __delattr__ __setattr__ __getattribute__使用(重写python提供的错误信息)

    自己定义了这些attr 查找删除设置就会触发自己定义的逻辑,如果不重新,pyton会提供自己报错信息class Room: def __init__(self,name): self.name = n ...

  10. JS StartMove源码-简单运动框架

    这几天学习js运动应用课程时,开始接触一个小例子:“仿Flash的图片轮换播放器”,其中使用的StartMove简单运动框架我觉得挺好用的.这个源码也简单,理解其原理,自己敲即便也就熟悉了. 用的时候 ...