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。

<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 注意事项
同一个日志系统不能现时出现桥接器和适配器,即:
- log4j-over-slf4j.jar 和 slf4j-log4j12.jar 不能同时存在
- jul-to-slf4j.jar 和 slf4j-jdk14.jar 不能同时存在
- jcl-over-slf4j.jar 和 slf4j-jcl.jar 不能同时存在
参考:
- 《Java常用日志框架介绍》:https://www.cnblogs.com/chenhongliang/p/5312517.html
- 《log4j2 官网》:http://logging.apache.org/log4j/2.x/manual/migration.html
- 《logback 官网》:https://github.com/qos-ch/logback
- 《logback的使用和logback.xml详解》:https://www.cnblogs.com/warking/p/5710303.html
每天用心记录一点点。内容也许不重要,但习惯很重要!
Java 日志体系的更多相关文章
- java 日志体系目录
java 日志体系目录 1.1 java 日志体系(一)log4j1.log4j2.logback.jul.jcl.slf4j 1.2 java 日志体系(二)jcl 和 slf4j 2.1 java ...
- java 日志体系(四)log4j 源码分析
java 日志体系(四)log4j 源码分析 logback.log4j2.jul 都是在 log4j 的基础上扩展的,其实现的逻辑都差不多,下面以 log4j 为例剖析一下日志框架的基本组件. 一. ...
- java 日志体系(三)log4j从入门到详解
java 日志体系(三)log4j从入门到详解 一.Log4j 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...
- Java 日志体系(二)jcl 和 slf4j
Java 日志体系(二)jcl 和 slf4j <java 日志体系(一)统一日志>:https://www.cnblogs.com/binarylei/p/9828166.html &l ...
- java日志体系的思考(转)
Java 日志缓存机制的实现 Java 日志管理最佳实践 混乱的 Java 日志体系 log日志远程统一记录 浅谈后端日志系统 Java异常处理和接口约定 用SLF4j/Logback打印日志-1 用 ...
- 混乱的 Java 日志体系
混乱的 Java 日志体系 2016/09/10 | 分类: 基础技术 | 0 条评论 | 标签: LOG 分享到: 原文出处: xirong 一.困扰的疑惑 目前的日志框架有 jdk 自带的 log ...
- Java日志体系居然这么复杂?——架构篇
本文是一个系列,欢迎关注 日志到底是何方神圣?为什么要使用日志框架? 想必大家都有过使用System.out来进行输出调试,开发开发环境下这样做当然很方便,但是线上这样做就有麻烦了: 系统一直运行,输 ...
- 【原创】架构师必备,带你弄清混乱的JAVA日志体系!
引言 还在为弄不清commons-logging-xx.jar.log4j-xx.jar.sl4j-api-xx.jar等日志框架之间复杂的关系而感到烦恼吗? 还在为如何统一系统的日志输出而感到不知所 ...
- Java日志体系(五)logback
1.1 简介 师出同门,与log4j一样,logback也是由Ceki Gülcü开发的开源日志组件,可以说是log4j的改进版:在现如今的项目中,logback的出现次数越来越多,是目前主流首选的日 ...
随机推荐
- Excel技巧--按内容分列与合并
上表的A列,如果想要按横线分隔开多列,复制粘贴很麻烦,可以使用“数据”-->“分列”来分隔开: 1.选择A列,在A列后预先插入三列空列.点击“数据”—>“分列”,对话框选择按“分隔符号”分 ...
- 轻量应用服务器 访问jsp页面就直接下载的问题
本地localhost 运行可以 用自己的ip不行.出现这个问题实质原因就是Tomcat服务器就没有起到作用,运行不了jsp文件.这个是核心.去排查错误!网上查了好几天了根本没有解决我的我的问题. 1 ...
- Flask--(项目准备)--添加日志
日志:记录程序运行的状态,在manage.py同级目录下创建logs文件夹 定义日志文件: import logging from logging.handlers import RotatingFi ...
- 彻底放弃没落的MFC,对新人的忠告!--吃瓜群众围观撕逼
http://bbs.csdn.net/topics/391817496 完全没想到10多年后还有人纠结要不要学MFC,我花点时间给新人们一个总结. 第1种观点 学习完MFC,你会更理解编程的思想,再 ...
- HTML5 使用小结
1.html5新增的常用元素 (a) <article.../>代表独立完整的一遍文章 (b)<section.../>对页面内容进行分块 (c)<nav.../> ...
- 系统变量之System.getenv()和System.getProperty()
Java提供了System类的静态方法getenv()和getProperty()用于返回系统相关的变量与属性,getenv方法返回的变量大多于系统相关,getProperty方法返回的变量大多与ja ...
- 让UITableView的section header view不悬停的方法
当 UITableView 的 style 属性设置为 Plain 时,这个tableview的section header在滚动时会默认悬停在界面顶端.取消这一特性的方法有两种: 将 style 设 ...
- leetcode每日刷题计划-简单篇day1
orzorz开始刷题 争取坚持每周平均下来简单题一天能做两道题吧 非常简单的题奇奇怪怪的错误orz越不做越菜 Num 7 整数反转 Reverse Integer 刚开始多给了一个变量来回折腾占地方, ...
- orcal安装
1.下载安装包(版本32位或64位)下载网址:https://www.oracle.com,建议关闭防火墙(可以的话关闭网) 2.将两个安装包解压为一个安装包 3.点击执行 3. 4. 5. 5. 6 ...
- Android Jetpack 概述
Android Jetpack Overview Android Jetpack Jetpack is a set of libraries, tools and architectural guid ...