Commons Logging是Jakarta项目的一个子项目,而Jakarta又是Apache名下的一个子项目。Jakarta项目的目标是开发适合包含第三方应用的可重用代码。有了这个目标以及现实中几种日志解决方案的不兼容,于是对于日志Jakarta开发者有两种选择。一是选择其中一种方案,这样产生的代码需要其它包括他的程序也要选择相同的日志包。另一种是根本就不使用日志语句,从而失去了大量的功能,变成需要自记录的代码。两种选择都难以令人满意,所以Jakarta的开发者开始了Commons Logging项目。
Commons Logging项目并不是另一个日志方案——这已经够多了。其实,它是一个轻量抽象层,用来智能地包装现有的日志系统。消息日志调用会经过它而传递到底层的日志系统中。最终结果是代码对任何日志系统来说都是适合的。
使用Commons Logging几乎不需要新的代码,而且看起来与使用log4j或JDK Logging API很相似。必须把commons-logging.jar包放在程序调用的CLASSPATH中。列表A中的代码是记录一条文字日志所需的最少代码。前两行只是用来引入所需的Commons Loging类。
注释为Line A的语句从LogFactory中请求一个Log类的实例。这个Log实例只是作为由LogFactory选择的任何一种日志包装的代理。LogFactory的静态方法getLog需要一个参数,可以是String或者Class。如果底层的日志系统支持的话,这个参数指出了日志的类型。注释为Line B的语句告知Log对象代理一个日志请求。除了查错级,还有信息、警告、错误、严重错误级。这些尽可能地被映射到底层日志系统所支持的错误级别上。
除了记录单纯的文字信息,Log类还可以记录Exception对象和底层日志系统的当前错误级别。Exception对象可以作为可选的第二参数传递给debug、info、warn、error以及fata方法,就像使用log4j或JDK Logging API一样。用与所支持的每个错误级别相应的isXxxxxxEnable方法来检查当前错误级别。使用它们是纯粹用于优化的目的。