commons-logging
log4j org.slf4
日志介绍
日志工具
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的整体性能比log4j也较佳,hibernate等项目已经采用了slf4j。
Log4J vs. LOGBack
LOGBack作为一个通用可靠、快速灵活的日志框架,将作为Log4j的替代和SLF4J组成新的日志系统的完整实现。相对于Log4J,LOGBack的优点如下:
快的实现
Logback的内核重写了,在一些关键执行路径上性能提升10倍以上。而且logback不仅性能提升了,初始化内存加载也更小了。
充分的测试
Logback经过了几年,数不清小时的测试。Logback的测试完全不同级别的。在作者的观点,这是简单重要的原因选择logback而不是
Logback-classic非常自然实现了SLF4j
Logback-classic实现了 SLF4j。在使用SLF4j中,你都感觉不到logback-classic。而且因为logback-classic非常自然地实现了SLF4J, 所 以切换到log4j或者其他,非常容易,只需要提供成另一个jar包就OK,根本不需要去动那些通过SLF4JAPI实现的
充分的文档
官方网站有两百多页的文档。
日志门面(Facade)
日志门面:为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。
SLF4J
实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。
下图为SLF4J调用底层Logging的一个整体说明:
Apache Common-Logging
目前广泛使用的Java日志门面库。通过动态查找的机制,在程序运行时自动找出真正使用的日志库。是各种日志实现的通用入口,会根据classpath中存在下面哪一个Jar来决定具体的日志实现库。
SLF4J vs. Apache
Common-Logging
SLF4J库类似于Apache
Common-Logging。但是,他在编译时静态绑定真正的Log库。使用SLF4J时,如果你需要使用某一种日志实现,那么你必须选择正确的SLF4J的jar包的集合。
Common-Logging通过动态查找的机制,使用ClassLoader寻找和载入底层的日志库。
另外,SLF4J 支持参数化的log字符串,避免了之前为了减少字符串拼接的性能损耗而不得不写的if(logger.isDebugEnable()),现在你可以直接写:logger.debug(“current
user is: {}”, user)。拼装消息被推迟到了它能够确定是不是要显示这条消息的时候,但是获取参数的代价并没有幸免。同时,日志中的参数若超过三个,则需要将参数以数组的形式传入,如:
Object[] params = {value1, value2, value3};
logger.debug(“first value: {}, second value: {} and third value: {}.”, params);
二、使用的所有jar文件
1)
log4j-1.2.15.jar 这是log4j的库。 SLF4J并不改变这个底层实现库。
2)
slf4j-api-1.5.2.jar 这是SLF4J库。
3)
logback-classic-0.9.29.jar,logback-core-0.9.29.jar 这是logback的库。
三、
如何使用
广泛使用的方案
commons-logging + log4j
这是应用最广泛的日志方案,大部分开源软件都采用了这种方式。使用此方案只需引入commons-logging和log4j两个jar包,并提供log4j.xml或log4j.properties配置文件即可。代码如下:
1) private static final Log log = LogFactory.getLog(LogTest.class); //推荐使用这种方式
2)private static final Logger log = Logger.getLogger(LogTest. class); // 使用这种方式其实只需要引入log4j包即可
高性能的方案
slf4j + logback
此方案性能高,使用灵活方便,可使用默认配置文件,也可以通过加载指定的配置文件。使用此方案需要引入slf4j, logback-core和logback-classic三个jar包,提供logback.xml。代码如下:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(LogTest. class);
使用slf4j+logback的优势:
l
支持按文件大小或基于时间的切分方式,可自定义命名
l
文件打包(触发器方式)
l
支持OSGI环境
如果在单纯的logging环境中,使用SLF4J意义不大。如果想在各种logger API中切换,SELF4J是理想选择,另外在新的项目中,使用SLF4J+Logback是比较好的日志框架选型。
分享到:
相关推荐
此外,虽然Commons Logging提供了一种抽象的日志解决方案,但随着日志框架的不断发展,一些现代的替代品如SLF4J(Simple Logging Facade for Java)和Logback应运而生。SLF4J提供了一个更简洁的API,并且设计上更...
Apache Commons Logging是另一个关键的Java库,它提供了一个统一的日志接口,让开发者可以轻松地切换不同的日志实现,如Log4j、Java内置的java.util.logging或Simple Logging Facade for Java (SLF4J)。这个库的主要...
在实际应用中,`commons-logging-1.1.1.jar`的使用通常需要配合具体的日志实现库一起,比如Log4j或SLF4J。这可以通过设置`commons-logging.properties`配置文件,或者通过系统属性`java.util.logging.config.file`来...
默认情况下,它会尝试查找系统属性`org.apache.commons.logging.Log`来确定日志实现,如果找不到,它会按顺序尝试使用Jakarta Commons Logging(JCL),Log4j,Java内置的日志系统等。用户可以通过设置系统属性或...
在实际开发中,为了规避潜在的问题,有的开发者选择使用其他的日志框架,如SLF4J(Simple Logging Facade for Java),它同样提供了一个抽象层,但比`commons-logging`更现代,且有更明确的绑定机制。 总的来说,`...
在Java世界里,我们常常会遇到多种日志框架并存的情况,比如Jakarta Commons Logging(JCL)和Log4j。本文将详细介绍如何使用`jcl-over-slf4j-1.6.0.jar`这个桥接包,实现从JCL到SLF4J的日志系统转换,并探讨其实际...
Commons Logging 1.2 是一个轻量级的日志接口,它不提供日志实现,而是作为一个桥梁,让应用程序能够在运行时选择和切换底层的日志实现,如Log4j、java.util.logging或Apache Log4j 2。以下是关于Commons Logging的...
Commons Logging 是 Apache 组织提供的一款轻量级的日志记录工具库,它的主要目标是为 Java 开发者提供一个简单的接口来使用各种日志框架,如 Log4j、Java Util Logging(JUL)或者 Simple Logging Facade for Java...
Apache Commons Logging是一个轻量级的日志记录API,它允许开发者选择在运行时使用他们所偏好的日志框架,如Log4j、java.util.logging或Simple Logging Facade for Java (SLF4J)等。它的主要作用是提供一个统一的...
3. 集成SLF4J:虽然SLF4J本身是一个接口,但可以通过桥接器(如slf4j-jdk14.jar或slf4j-log4j12.jar)将SLF4J与Commons Logging连接起来。 五、优缺点分析 优点: - 提供了日志接口的统一,简化了代码。 - 动态...
SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它提供了一个接口,允许用户在运行时动态地绑定到各种具体的日志框架,如Log4j、Java内置的日志或者Logback等。这个设计使得开发者可以在不修改...
slf4j-api-1.7.21.jar csvjdbc-1.0.35.jar csvjdbc-1.0.37.jar dans-dbf-lib-1.0.0-beta-10.jar db2jcc4.jar jt400.jar derby-10.15.1.3.jar derbyclient-10.15.1.3.jar derbyshared-10.15.1.3.jar derbytools-10.15...
然而,从Spring 4.x版本开始,Spring逐渐转向使用SLF4J(Simple Logging Facade for Java)作为首选的日志抽象层,但仍然保持对Commons Logging的兼容性,以照顾老版本的用户。 在实际使用时,为了配置Commons ...
Commons Logging是一个日志抽象层,允许开发者在不修改代码的情况下切换不同的日志实现,如Log4j、Java内置的日志API(java.util.logging)或Commons Logging自己的简单实现。通过这个库,你可以避免与特定日志框架...
通过 Commons Logging,你可以方便地切换日志实现,如Log4j、java.util.logging (JUL) 或者 Simple Logging Facade for Java (SLF4J)。这样,如果你需要更换日志框架,只需要更改配置,而不需要修改代码。 在...
最后,`commons-logging.jar`是Apache Commons Logging库,它是一个轻量级的日志接口抽象层,允许开发者选择底层的日志实现,如Log4j、Java内置日志或者SLF4J等。通过使用Commons Logging,开发者可以轻松地更换日志...
hibernate-release-5.0.7.Final压缩包 -document ...3.18.1-GA.jar jboss-logging-3.3.0.Final.jar log4j-1.2.16.jar mysql-connector-java-5.1.7-bin.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.7.2.jar
举个例子:如果一个程序希望用 log4j 日志工具,那么程序只需针对 slf4j-api 接口编程,然后在打包时再放入 slf4j-log4j12-version.jar 和 log4j.jar 就可以了。 现在还有一个问题,假如你正在开发应用程序所调用...
今天我们将聚焦两个流行的日志框架——SLF4J(Simple Logging Facade for Java)和Logback,以及它们与Log4j和Commons-Logging的对比。 SLF4J是一个接口层的日志框架,它提供一个统一的API,允许用户在运行时插入...
Commons Logging是Apache软件基金会开发的一个Java日志抽象层,它为各种日志框架提供了一个统一的接口,如Log4j、java.util.logging (JUL) 和Simple Logging Facade for Java (SLF4J)。标题提到的"commons-logging-...