`

slf4j兼容commons-logging,log4j,java.util.logging,支持log4j.xml和log4j.properties配置

阅读更多

最近在做一个集成,据说 log4j.xml 做日志配置文件将是个趋势。故采用log4j.xml做日志配置

在我的项目开发中,我想看到

【1】. hibernate的详细输出日志;

【2】. struts2(实际上是xwork 2.1.1版本)的输入日志:debug 级别时,可以看到页面的传入参数;

【3】. json插件 (jsonplugin-0.30.jar) debug 级别时,输出生成的json字符串,便以查看;

【4】. 连接池c3p0 (c3p0-0.9.1.2.jar) debug 时,随时查看连接池基本信息。

不输出其他日志。

说明:xwork 版本,xwork-2.1.1以及以上版本 自己实现了log日志(基于org.commons.logging),而xwork-2.0.6以及以下版本则直接采用的是org.commons.logging日志(猜的,比版本2.1.1少logging包);

页面输入参数和值由类:com.opensymphony.xwork2.interceptor.ParametersInterceptor debug时输出;

json输出字符串由类 com.googlecode.jsonplugin.JSONUtil 输出;

连接池基本信息:com.mchange.v2.resourcepool.BasicResourcePool输出;

之前使用log4j.properties,出现日志 【1 】 【2】【3】【4】;

重新搭建项目引入spring2.5等其他,改成log4j.xml配置,出现日志【1】【4】。(不过最后多次试验发现原来是commons-logging版本之间问题

查看其源代码发现

1.hibernate log4j日志采用了 slf4j-api 接口实现 兼容 log4j.xml和log4j.properties;

2. xwork-2.1.1基于org.commons.loging 实现了自己的日志,如果没有commons-logging包,就采用java.util.logging;

3.json插件 则直接采用的是org.commons.loging

4.c3p0日志也是自己实现,比较复杂 。支持 log4j.xml和log4j.properties,不受commons-logging版本影响

为了实现我的【2】【3】目标 (【1】【4】已经可以),我修改了xwork的日志实现方法,改成基于slf4j实现,本身就是工厂模式实现,所以改动量比较小(改之后,不支持级别fatal)。对于【3】 只能修改每个java文件,幸好文件不多(最后发现只要换其他commons-logging版本)。

总结:

commons.loging ---->>使用 commons-logging-api-1.1.jar,版本太新,无法显示xwork-2.1.1 日志。包括spring2.5.5版本的日志,选择使用commons-logging-1.0.4.jar 可以显示。

log4j--->>log4j.xml 和log4j.properties

slf4j --->>>log4j.xml和log4j.properties 更多,需要对应的日志版本,如果没有会出错提示;

以后开发项目中采用slf4j-api 做记录日志,因为兼容多种日志,相关的jar包有

slf4j-api-1.5.0.jar,slf4j-api-1.5.2.jar,slf4j-log4j12-1.5.0.jar(和log4j就有关),slf4j-jdk14-1.5.2.jar(和java.util.logging有关)。

对于slf4j的介绍如下(搜索到的)

SLF4J不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。

  实际上,SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类。从某种程度上,SLF4J有点类似JDBC,不过比JDBC更简单,在JDBC中,你需要指定驱动程序,而在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。

1、什么情况可以使用

  如果你开发的是类库或者嵌入式组件,那么就应该考虑采用SLF4J,因为不可能影响最终用户选择哪种日志系统。在另一方面,如果是一个简单或者独立的应用,确定只有一种日志系统,那么就没有使用SLF4J的必要。假设你打算将你使用log4j的产品卖给要求使用JDK 1.4 Logging的用户时,面对成千上万的log4j调用的修改,相信这绝对不是一件轻松的事情。但是如果开始便使用SLF4J,那么这种转换将是非常轻松的事情。

简单的说 slf4j 就是兼容各种日志,对应开发者来说,使用slf4j和使用commons.loging 或log4j是一样的,只是导入不同的类

--wayfoon

分享到:
评论

相关推荐

    slf4j与commons-logging处理日志

    SLF4J(Simple Logging Facade for Java)和Apache Commons Logging是两个在Java开发中广泛使用的日志框架。它们提供了一种抽象层,允许开发者在不修改代码的情况下切换不同的日志实现,如Log4j、Java Util Logging ...

    commons-modeler-XXX.jar、commons-logging-XXX.jar

    Apache Commons Logging是另一个关键的Java库,它提供了一个统一的日志接口,让开发者可以轻松地切换不同的日志实现,如Log4j、Java内置的java.util.logging或Simple Logging Facade for Java (SLF4J)。这个库的主要...

    hibernate使用的commons-logging-1.1.3.jar包

    在Hibernate中,`commons-logging`被用作日志服务的接口,使得Hibernate能够适配多种日志系统,如Log4j、Java内置的日志框架java.util.logging,或者简单的控制台输出。这种灵活性让开发者可以根据项目需求选择最...

    commons-logging-1.2

    Commons Logging 是 Apache 组织提供的一款轻量级的日志记录工具库,它的主要目标是为 Java 开发者提供一个简单的接口来使用各种日志框架,如 Log4j、Java Util Logging(JUL)或者 Simple Logging Facade for Java...

    commons-logging-1.1.1.jar.zip

    在实际应用中,`commons-logging-1.1.1.jar`的使用通常需要配合具体的日志实现库一起,比如Log4j或SLF4J。这可以通过设置`commons-logging.properties`配置文件,或者通过系统属性`java.util.logging.config.file`来...

    commons-logging-1.2.1.1.jar

    此外,虽然Commons Logging提供了一种抽象的日志解决方案,但随着日志框架的不断发展,一些现代的替代品如SLF4J(Simple Logging Facade for Java)和Logback应运而生。SLF4J提供了一个更简洁的API,并且设计上更...

    commons-logging-1.1.3.rar

    通过 Commons Logging,你可以方便地切换日志实现,如Log4j、java.util.logging (JUL) 或者 Simple Logging Facade for Java (SLF4J)。这样,如果你需要更换日志框架,只需要更改配置,而不需要修改代码。 在...

    commons-logging-1.1.3-jar包

    2. **自动检测日志实现**:在运行时,Commons Logging会尝试自动检测可用的日志实现,例如Log4j、Java内置日志(java.util.logging.Logger)、Jakarta Commons Logging自身的SimpleLog等。这通过检查类路径中的特定...

    日志框架commons-logging springMVC必备

    它不实现任何具体的日志功能,而是作为一个适配器,允许开发者选择或切换底层的日志实现,如Log4j、Java内置的日志(java.util.logging)或者SLF4J等。这样做的好处在于,开发者可以在不修改代码的情况下,根据项目...

    commons-logging-1.2.zip

    简称Commons Log,是Apache软件基金会的一个开源项目,提供了一种统一的日志接口,使得Java开发者能够在不关心具体日志实现的情况下,方便地切换不同的日志框架,如Log4j、java.util.logging(JUL)或Simple Logging...

    commons-logging-1.1.1

    这个库的主要目的是提供一个统一的日志API,使得开发者能够在不关心具体日志实现的情况下,方便地切换不同的日志框架,如Log4j、Java内置的日志系统(java.util.logging)或SLF4J等。 Commons Logging的设计理念是...

    commons-logging-1.1.1.rar

    这个库在JAVA Web开发中广泛使用,为各种日志API如Log4j、java.util.logging (JUL) 和 Simple Log 提供了一个统一的接口。 Commons Logging的核心思想是解耦应用代码和日志实现。在开发过程中,开发者只需要与...

    commons-logging-1.1.1-bin

    Apache Commons Logging 是一个Java日志库,它提供了一个接口,允许开发者使用多种不同的日志框架,如Log4j、java.util.logging(JUL)或Simple Logging Facade for Java(SLF4J)。这个库的核心在于它的灵活性,...

    commons-logging-1.1.1.jar开发架包

    Commons Logging是Apache软件基金会开发的一个Java日志抽象层,它为各种日志框架提供了一个统一的接口,如Log4j、java.util.logging (JUL) 和Simple Logging Facade for Java (SLF4J)。标题提到的"commons-logging-...

    Spring3.2.9+commons-logging-1.2.jar

    这个库是一个轻量级的日志抽象层,允许开发者选择自己喜欢的日志实现,如Log4j、Java Util Logging或SLF4J。在Spring框架中, Commons Logging被用作日志记录的基础,因为它的可配置性和可插拔性使得开发者可以在不...

    commons-logging-1.2.jar commons-vfs-2.2.jar

    Apache Commons Logging是一个轻量级的日志记录API,它允许开发者选择在运行时使用他们所偏好的日志框架,如Log4j、java.util.logging或Simple Logging Facade for Java (SLF4J)等。它的主要作用是提供一个统一的...

    apache-log4j-2.11.2-bin.tar.gz

    它与Apache Commons Logging库兼容,后者是一个抽象层,允许开发者在不同日志实现之间切换,例如Log4j、java.util.logging或Logback。 在Java世界中,Spring框架是核心的依赖注入(DI)和面向切面编程(AOP)平台,...

    commons-loggin 与 slf4j的桥接器

    标题 "commons-logging 与 slf4j的桥接器" 涉及到的是Java日志框架中的两个重要组件,以及它们之间的交互。这里主要讨论的是如何将Apache Commons Logging(简称commons-logging)与Simple Logging Facade for Java...

    commons-codec-1.4.jar commons-httpclient.jar commons-logging-1.0.4(1).jar

    Commons Logging是一个日志抽象层,允许开发者在不修改代码的情况下切换不同的日志实现,如Log4j、Java内置的日志API(java.util.logging)或Commons Logging自己的简单实现。通过这个库,你可以避免与特定日志框架...

Global site tag (gtag.js) - Google Analytics