用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(); }
}


参考:[url]http://hi.baidu.com/zeorliu/blog/item/41b355ed1dcca6d2b31cb1a9.html[/url] 可替代commons-logging的SLF4J:(改进)
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐