Sunday, August 22, 2010

Java 中的日志解决方案

Java 里面有一些现成的 logging 库,比如 log4j(apache logging 的子项目),JDK 里面自带的 java.util.logging,以及 jakarta commons 里面的 logging 库 。这样也就诞生了很多 wrapper,或者用 design pattern 的话来说所谓 facade 的东西,比如 org.apache.commons.logging 和 org.slf4j。这两个使用比较容易,一般提供了一个 factory 用于获得 logger(前者为 LogFactory.getLog(),后者为 LoggerFactory.getLogger())。

下面用一个简单的例子说明如何使用 org.apache.commons.logging。
import org.apache.commons.logging.Log ;
import org.apache.commons.logging.LogFactory ;

private Log log = LogFactory.getLog( MyClass.class ) ;
if( log.isFatalEnabled() ) 
    log.fatal( "this is a fatal error message") ;

import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ; 

Logger log = LoggerFactory.getLogger( MyClass.class ) ;
log.debug( "something in {} is {}", something, val) ;
类似的还有 info、warn、error、trace 用在不同的情况。

后者提供了几个 hard-wired 的库,如 slf4j-nop(无输出)、slf4j-jdk(使用 java.util.logging)、slf4j-log4j(使用 log4j)、slf4j-simple(使用 System.err)、slf4j-jcl(使用 jakarta commons logging)。通过改变 -cp 就能方便的使用不同的 logger。

值得一提的是在 apache 的 logging 里面不仅仅有 java 的,还有 C++、.net 和 php 的 logger。

No comments:

Post a Comment