`

SLF4J+logBack 代替 Log4j

阅读更多
Ceki Gülcü创造了日志领域界著名的Log4J,现在又实现一个“简单的日志前端接口(Facade)”- SLF4J,和一个“可靠、通用、快速而又灵活的Java日志框架”- LOGBack。作为日志领域中的新秀,已经有种颠覆领域的趋势了。

SLF4J(Simple Logging Facade for Java)作为commons-logging的替代,为各种logging APIs提供了一个简单的统一接口,使得最终用户能够在部署的时候配置所希望的logging APIs的实现。

SLF4J会根据classpath中所存在的适配器的jar来决定将使用的日志实现库。

若需要将使用了其它logging APIs的第三方类库或已有代码的日志调用迁移到SLF4J,需要替换下面的jar:

jcl-over-slf4j.jar
替换apache commons logging。
log4j-over-slf4j.jar
替换log4j。原有的log4j.properites将失效,需要转换为logback.xml,logback网站上有提供转换器:http://logback.qos.ch/translator/。
jul-to-slf4j.jar
替换jdk logging。需要在程序开始时调用SLF4JBridgeHandler.install()来注册listener。
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);

现在Hibernate、Jetty、Spring-OSGi、Wicket和MINA等项目都已经迁移到了SLF4J,由此可见SLF4J的影响力不可忽视。

LogBack将作为Log4j的替代,和slf4j组成新的日志系统的完整实现。LogBack分为三个模块:logback-core、logback-classic和logback-access。logback-core是其它两个模块的基础;logback-classic是log4j的一个改良版本; logback-access与Servlet容器集成提供通过Http来访问日志的功能。

LogBack声称具有极佳的性能:

“某些关键操作,比如判定是否记录一条日志语句的操作,其性能得到了显著的提高。这个操作在LogBack中需要3纳秒,而在Log4J中则需要30纳秒。LogBack创建记录器(logger)的速度也更快:13毫秒,而在Log4J中需要23毫秒。更重要的是,它获取已存在的记录器只需94纳秒,而Log4J需要2234纳秒,时间减少到了1/23。跟JUL相比的性能提高也是显著的”。

对于一般的系统,个人感觉迁移到SLF4J的必要性不是很大,如果是开发公用类库的话,就很有必要了,而且SLF4J解决了classloader的问题也是个很大的优势。Log是导致程序性能下降的一个问题,LogBack的优化使性能有了很大的提升,如果你的程序遇到了瓶颈,需要全面进行优化的时候,LogBack不失为一个好的选择。是否需要迁移,可从多方面进行考量
分享到:
评论
1 楼 archerwq 2015-11-23  
赞一个! slf4j+logback详细原理可参考:http://www.archerwq.com/java_logging_integrate_slf4j_and_logback/

相关推荐

    slf4j日志,可以使用它代替LOG4J

    SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它的设计目的是为各种日志框架提供一个统一的接口,使得开发者可以在不改变代码的情况下切换不同的日志实现,比如从Log4j切换到Logback,或者...

    commons-loggin 与 slf4j的桥接器

    4. **代码修改**:在代码中,使用SLF4J的`LoggerFactory.getLogger()`方法代替commons-logging的`LogFactory.getLog()`方法获取logger实例。 通过这样的桥接,我们可以保持原有的代码结构不变,同时享受到SLF4J带来...

    hibernate-distribution 3.3.2+annotation3.4.0+slf4j-1.5.8.rar )

    1. **日志门面**:SLF4J(Simple Logging Facade for Java)提供了一种标准的日志接口,允许开发者在不修改代码的情况下切换不同的日志实现(如Log4j、Logback等),实现了日志记录的解耦。 2. **API设计**:SLF4J...

    logback-ext-spring.jar

    《Spring框架下Logback的使用与替换Log4j教程》 在Java开发中,日志记录是不可或缺的一部分,它帮助开发者追踪程序运行...实践过程中,务必参照提供的`Spring使用logback代替log4j.txt`文件,以便更好地理解和应用。

    蓝凌JAVA产品V16开发手册

    - **框架选择**:从之前的Log4j切换到SLF4J + Logback组合。 - **原因**:统一日志门面接口,提高日志记录的效率、稳定性和易用性。 - **具体变化**:删除了旧的日志配置文件`${project}src/log4j.properties`,并将...

    sofa-common-tools:Sofa-common-tools是一个向其他SOFA库提供一些实用程序功能的库

    背景在日常开发中,Java日志记录通常包括选择日志外观(例如JCL和SLF4j)和日志实现(例如Log4j2和logback)。 假设您正在开发使用JAR的应用程序,该JAR利用log4j2进行日志记录。 在这种情况下,您不能选择log4j2...

    Spring Boot异步输出Logback日志方法详解

    2. **logback-classic**:基于log4j的改进版,同时完全实现了SLF4J(Simple Logging Facade for Java)API,使得切换到其他日志系统(如log4j或JDK14 Logging)变得简单。 3. **logback-access**:与Servlet容器集成...

    Spring 4.0 官方参考手册

    - **使用 SLF4J 与 Log4j 或 Logback**:解释了如何将 SLF4J 作为日志门面与 Log4j 或 Logback 结合使用。 - **使用 JUL (java.util.logging)**:介绍如何配置 JUL 以与 Spring 兼容。 - **WebSphere 上的 ...

    hibernate需要的jar包

    5. **SLF4J (Simple Logging Facade for Java)**: Hibernate使用SLF4J作为日志抽象层,允许开发者选择任何兼容的实现,如Logback或Log4j。你需要`slf4j-api-x.x.x.jar`和具体日志实现的jar包,如`logback-classic-x....

    java 日志的数据脱敏的实现方法

    另一个方法是通过日志框架(如Log4j或SLF4J)设置过滤器,匹配并替换特定的敏感关键字。但这可能会导致性能下降,因为每个日志输出都要进行正则匹配。 为了克服上述两种方法的局限,可以采取一种混合策略,即在...

    阿里巴巴黄山版和嵩山版java开发手册.zip

    2. **日志框架**:推荐使用成熟的日志框架,如Log4j、SLF4J、Logback。 3. **堆栈跟踪**:在错误日志中包含堆栈跟踪信息,便于定位问题。 **六、性能优化** 1. **内存管理**:避免内存泄漏,合理设置对象的生命...

    阿里巴巴Java开发手册(嵩山版).pdf

    为什么禁止工程师直接使用日志系统(Log4j、Logback)中的API? - **统一规范**:直接使用日志系统的API可能导致日志输出不一致,难以维护。 - **标准流程**:建议通过统一的日志框架接口来进行日志记录,如SLF4J,...

Global site tag (gtag.js) - Google Analytics