Java 日志体系
由一张图说起
图来源于https://www.slf4j.org/legacy.html
图中讲的如何通过SLF2J把各种日志框架桥接起来(可见java的日志框架之多)。
主要有三部分:
都变为logback
- commons loging api –(jcl-voer-slf4j.jar)–> logback
- log4j –(log4j-over-slf4j.jar)–> logback
- java.util.logging –(jul-to-slf4j.jar)–> logback
都变为log4j
- commons loging api –(jcl-voer-slf4j.jar)–> log4j
- java.util.logging –(jul-to-slf4j.jar)–> log4j
都变为java.util.logging
- commons loging api –(jcl-voer-slf4j.jar)–> slf4j-jdk14.jar
- log4j –(log4j-over-slf4j.jar)–> slf4j-jdk14.jar
总之,通过slf4j的桥接可以替换现有程序中的日志框架。
实践由java.util.logging 替换成logback
示例代码,没加任何第三方依赖
1 |
|
现在把上面的程序java.util.logging库换成logback。
先是要按上面的那图,把依赖加好。
- jul-to-slf4j
- slf4j-api
- logback-classic
结果运行,还是一样的结果。经过搜索,还要做一些替换的安装的工作。
替换后的代码如下
1 |
|
新加的两行可以放在别的代码初始化的位置。
举一反三,其它的几种,按上面的介绍,也是能顺利桥接的。
各日志系统的介绍
log4j
Apache 的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务 器、NT的事件记录器、UNIX Syslog守护进程等;用户也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,用户能够更加细致地控制日志的生成过程。
Logback
Logback 是由 log4j 创始人设计的又一个开源日记组件,Logback 当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块,logback-classic是log4j的一个 改良版本。此外logback-classic 完整实现 SLF4J API 使你可以很方便地更换成其它日记系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日记的功能。
Logback 作为一个通用可靠、快速灵活的日志框架,Logback 声称具有极佳的性能。
SLF4J
简单日志门面(Facade) SLF4J 是为各种 loging APIs 提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。
Apache Common-Logging
目前广泛使用的Java日志门面库。通过动态查找的机制,在程序运行时自动找出真正使用的日志库。
那么这些日志怎么用,之间的依赖是什么样子的,还有启动初始化的过程究竟干了什么,怎么找到相应的实现类及配置的。
可以看下oschina上的系列文章
- jdk-logging、log4j、logback日志介绍及原理
- commons-logging与jdk-logging、log4j1、log4j2、logback的集成原理
- slf4j与jdk-logging、log4j1、log4j2、logback的集成原理
- slf4j、jcl、jul、log4j1、log4j2、logback大总结
这几篇的作者从源码解析的角度分析日志库的原理。
总结
- 了解java系统中常见的几种日志系统
- 能桥接和切换各个日志系统
- logback+slf4j是目前比较公认较好的日志组合,新项目建议选用