`
zeroliu
  • 浏览: 195927 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

日志API改进:用commons-log还是slf4j?这是一个问题!

阅读更多
用commons-log还是slf4j?这是一个问题!
看jdk中的logger不爽,最早直接用Log4j,后来参考Spring主要用commons-log,再后来看见很多新的开源项目如mina2等都采用了slf4j日志系统。我个人还是比较喜欢格式化的输出的方式,避免Spring中大量出现的 if (_log.isDebugEnabled())条件判断语句。对slf4j还有点不爽的,就是后面的参数最多只能定义2个。在jdk1.5中,允许定义可变数目的参数,因而可以有更好的封装方式。可以定义如下,那么以后封装的系统,只有MyLog与日志API直接依赖(commons-log、slf4j),所以很容易在不同的日志系统间切换。
public interface MyLogInf {
    public void debug(String message, Object... args);
    public void info(String message, Object... args);
    public void warn(String message, Object... args);
    public void error(Throwable e, String message, Object... args);
    public boolean isDebugEnabled();//仅仅用于打印辅助调试信息(而在debug()中已经,无需单独代码调用)
}

public class MyLog implements MyLogInf{
    public static MyLog getLog(Class clz)	{ return new MyLog(clz.getName());  }
    public static MyLog getLog(String clz) 	{ return new MyLog(clz);    		}
    static MyLogInf getLogger()				{ return getLog(MyLog.class);		}
	//------------------ 方案1
//	private org.apache.commons.logging.Log _log = null;
//	public MyLog(String clz) { _log = org.apache.commons.logging.LogFactory.getLog(clz);}
	//------------------ 方案2
	private org.slf4j.Logger _log = null;
    public MyLog(String clz) { _log = org.slf4j.LoggerFactory.getLogger(clz);}
	//------------------
    public void debug(String message, Object... args){
    	if (_log.isDebugEnabled())	_log.debug(String.format(message, args));
    }
    public void info(String message, Object... args) {
    	if (_log.isInfoEnabled())	_log.info(String.format(message, args));
    }
    public void warn(String message, Object... args){
    	if (_log.isWarnEnabled())	_log.warn(String.format(message, args));
    }
    public void error(Throwable e, String message, Object... args){
    	if (_log.isErrorEnabled())	_log.error(String.format(message, args), e);
    }
	//------------------
    public boolean isDebugEnabled() { return _log.isDebugEnabled();    }
}


参考:http://hi.baidu.com/zeorliu/blog/item/41b355ed1dcca6d2b31cb1a9.html 可替代commons-logging的SLF4J:(改进)
2
0
分享到:
评论
3 楼 zeroliu 2009-03-11  
flyfan 写道

早已从commons-logging转到SLF4J,log4j转到logback

因为很多地方使用了spring,所以还得依赖于commons-logging包。
所以后来才自定义一个MyLog类,屏蔽底层日志的差别了。听说logback很好而且还快,但暂时还没用过。需要时直接用MyLog包装一下就能很快切换过去。
2 楼 piggy 2009-02-27  
引用
对slf4j还有点不爽的,就是后面的参数最多只能定义2个。


同感.
1 楼 flyfan 2009-02-12  
早已从commons-logging转到SLF4J,log4j转到logback

相关推荐

    commons-loggin 与 slf4j的桥接器

    这个库提供了一个API,开发者可以使用这个API来记录日志,而无需关心底层的日志系统是log4j、java.util.logging还是其他。然而,commons-logging自身并不提供具体的日志实现,而是作为一个接口,让开发者能够根据...

    jcl-over-slf4j-1.6.0.jar logbank转log4j 日志转换 使用场景 实例

    SLF4J提供了一个统一的日志API,允许开发者选择任意的日志实现,比如Logback或Log4j。 `jcl-over-slf4j-1.6.0.jar`是SLF4J提供的一个桥接包,它的主要作用是将JCL的日志调用透明地重定向到SLF4J。这样做的好处是,...

    jcl-over-slf4j-1.7.25.jar 由于下载次数较多,所需积分上去了,我已下调

    举个例子:如果一个程序希望用 log4j 日志工具,那么程序只需针对 slf4j-api 接口编程,然后在打包时再放入 slf4j-log4j12-version.jar 和 log4j.jar 就可以了。 现在还有一个问题,假如你正在开发应用程序所调用...

    spring整合mybatis所需jar包包括log4j-api-2.3,slf4j-api-1.7.25等

    6. **日志适配器**:`commons-logging-1.2.jar`是Apache Commons Logging库,它提供一个日志API的抽象层,可以透明地使用各种日志实现,包括我们前面提到的Log4j。 整合Spring与MyBatis的步骤通常包括以下几步: 1...

    slf4j与commons-logging处理日志

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

    slf4j+logback 于log4j+commons-logging大PK

    SLF4J是一个接口层的日志框架,它提供一个统一的API,允许用户在运行时插入任意的日志实现,如Logback或Log4j。它的核心理念是解耦日志库的实现与应用代码,使得更换日志框架变得灵活且无需修改代码。SLF4J通过`slf4...

    slf4j最新jar包下载和jar包

    SLF4J(Simple Logging Facade for Java)是Java中的一种日志抽象层,它提供了一个接口,允许用户在运行时动态地绑定到各种具体的日志框架,如Log4j、Java内置的日志或者Logback等。这个设计使得开发者可以在不修改...

    slf4J的所有相关jar

    SLF4J(Simple Logging Facade for Java)是Java日志框架的一个接口层,它提供了一个统一的日志API,允许用户在部署时插入所需的日志实现。SLF4J的主要目的是为各种日志框架,如log4j、logback、java.util.logging等...

    commons-logging-1.2.1.1.jar

    SLF4J提供了一个更简洁的API,并且设计上更侧重于避免类加载器问题,而Logback则是一个高性能的日志实现,与SLF4J紧密集成。因此,在新项目中,许多开发者倾向于选择SLF4J和Logback的组合,以获得更好的性能和可维护...

    hibernate3.3.2+commons-lang2.3+slf4j1.5.8+log4j1.2.16.zip

    接下来,`SLF4J(Simple Logging Facade for Java)1.5.8`是一个用于各种日志API的简单抽象,允许最终用户在部署时插入所需的日志框架。SLF4J提供了一个绑定机制,允许开发者在编译时或运行时选择特定的日志实现,如...

    slf4j包1.6.4版

    SLF4J(Simple Logging Facade for Java)是Java日志记录的一个接口层,它为各种日志框架,如Log4j、Java Util Logging、Logback等,提供了一个统一的API,使得开发者可以在运行时选择具体使用的日志实现。...

    slf4j-1.7.9.zip

    2. **slf4j-log4j12.jar**:这是一个绑定包,用于将SLF4J接口与Log4j日志框架绑定。如果你的项目中已经使用了Log4j作为日志系统,那么可以引入这个jar包,SLF4J将会通过这个绑定将日志消息传递给Log4j。 3. **slf4j...

    apache-log4j-2.11.2-bin.tar.gz

    3. `log4j-slf4j-impl-2.11.2.jar`: 如果你希望使用SLF4J(Simple Logging Facade for Java)作为日志API,这个JAR提供了Log4j的实现。 4. `log4j-jul-2.11.2.jar`: 用于与Java Util Logging(JUL)接口集成的适配器...

    slf4j-jcl-1.7.7.zip

    `slf4j-jcl-1.7.7.zip`这个压缩包包含了SLF4J与Jakarta Commons Logging(JCL)的适配器,JCL是一个早期的日志抽象层,SLF4J通过这个适配器使得JCL的用户可以无缝切换到SLF4J,享受更好的日志管理。 **Jakson API**...

    slf4j+logback日志系统介绍

    SLF4J(Simple Logging Facade for Java)作为一个新兴的日志框架,由Ceki Gülcü开发,旨在提供一个简单而统一的日志接口,以替代commons-logging。其主要目标是降低应用对具体日志实现库的依赖,并允许用户在部署...

    slf4j+logback快速上手教程

    **Logback**是一个开源日志框架,由Log4j的作者Ceki Gülcü开发。Logback以其高性能、灵活的配置以及强大的功能而著称。它旨在提供比Log4j更优秀的表现,并与SLF4J紧密集成,成为SLF4J推荐的日志实现之一。 **主要...

    commons-dbcp-2-2.50+commons-pool2-2.6.0+commons-logging-1.2

    - Commons Logging是一个轻量级的日志记录API,允许开发者在不修改代码的情况下切换不同的日志实现,如Log4j、Java Util Logging或SLF4J。 - 版本 1.2 是一个稳定版本,虽然较旧但广泛兼容,为各种Java项目提供...

    commons-logging-1.2.zip

    3. 集成SLF4J:虽然SLF4J本身是一个接口,但可以通过桥接器(如slf4j-jdk14.jar或slf4j-log4j12.jar)将SLF4J与Commons Logging连接起来。 五、优缺点分析 优点: - 提供了日志接口的统一,简化了代码。 - 动态...

    Commons-logg测试代码

    Commons-Logging是Apache软件基金会开发的一个Java日志抽象层,它为各种日志框架提供了一个统一的接口,包括Log4j、Java内置的日志API(java.util.logging)以及Simple Logging Facade for Java (SLF4J)。这个库的...

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

    在实际开发中,为了规避潜在的问题,有的开发者选择使用其他的日志框架,如SLF4J(Simple Logging Facade for Java),它同样提供了一个抽象层,但比`commons-logging`更现代,且有更明确的绑定机制。 总的来说,`...

Global site tag (gtag.js) - Google Analytics