Showing posts with label slf4j. Show all posts
Showing posts with label slf4j. Show all posts

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。