所谓的Commons Logging接口,是指将日志功能的使用与日志具体实现分开,通过配置文件来指定具体使用的日志实现。这样你就可以在Struts 1.1中通过统一的接口来使用日志功能,而不去管具体是利用的哪种日志实现,有点于类似JDBC的功能。Struts 1.1中支持的日志实现包括:Log4J,JDK Logging API, LogKit,NoOpLog和SimpleLog。
你可以按照如下的方式来使用Commons Logging接口(可以参照Struts源文中的许多类实现):
package com.foo;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Foo {
private static Log log = LogFactory.getLog(Foo.class);
public void setBar(Bar bar) {
if (log.isTraceEnabled()) {
log.trace("Setting bar to " + bar);
}
this.bar = bar;
}
}
而开启日志功能最简单的办法就是在WEB-INF/classes目录下添加以下两个文件:
commons-logging.properties文件:
# commons-logging.properties
org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
simplelog.properties文件:
# Logging detail level,
# Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
org.apache.commons.logging.simplelog.defaultlog=fatal
这里我们采用的日志实现是SimpleLog,你可以在simplelog.properties文件指定日志明细的级别:trace,debug,info,warn,error和fatal,从trace到fatal错误级别越来越高,同时输出的日志信息也越来越少。而这些级别是和org.apache.commons.logging.log接口中的方法一一对应的。这些级别是向后包含的,也就是前面的级别包含后面级别的信息。
Struts本身并没有配置日志功能,日志功能由commons-logging实现。在Struts中对日志功能的使用遵循以下的步骤:
1、如果存在log4j,就使用log4j(默认)。
在WEB-INF/classes目录下添加log4j.properties,即可启用log4j。下面是一个与hibernate搭配的log4j.properties文件:
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file hibernate.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d:\\hhhibernate.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=warn, stdout,file
log4j.logger.net.sf.hibernate=info
### log just the SQL
#log4j.logger.net.sf.hibernate.SQL=debug
### log JDBC bind parameters ###
log4j.logger.net.sf.hibernate.type=info
### log schema export/update ###
log4j.logger.net.sf.hibernate.tool.hbm2ddl=debug
### log cache activity ###
#log4j.logger.net.sf.hibernate.cache=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trace
2、如果存在JDK1.4, 使用JDK1.4。
3、如果两者都不存在,就使用SimpleLog。
Commons Logging接口实现了日志功能的使用与日志具体实现的分离。这样你在Struts 1.1中就可以通过统一的接口来使用日志功能,而不必关心日志功能是由哪种方案来实现。如果你需要Struts当前支持的日志实现方案,你可以参考 org.apache.commons.logging的文档。如果你要在Struts中使用commons-logging功能,你就需要把所需的JAR文件加到到你的应用程序库中。也许有时候你会问“我真的需要使用commons-logging吗”。问题答案取决于实际项目的要求。如果你希望你的日志方案能够轻易的改变日志实现方案而同时又对你的应用程序没有什么影响,那么commons-logging会是一个非常好的选择。
那么,我们如何在我的编码过程中学习使用commons-logging呢?
在你的代码中使用commons-logging是件简单的事,你所做的就是加入两个import,同时声明一个logger。
package com.foo;
// ...
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
...
public class Foo {
// ...
private static Log log = LogFactory.getLog(Foo.class);\\
// ...
public void setBar(Bar bar) {
if (log.isTraceEnabled()) {
log.trace("Setting bar to " + bar);
}
this.bar = bar;\\
}
// ...
}
通常,我们会为每个类都生成唯一的一个logger。为了方便起见在我们给这个logger命名的时候希望这个对象的名称能够体现出这个logger是在哪个地方使用的。在这个例子中logger的名字是com.foo.Foo。这样你通过logger的名字就可以很快地指向问题出现的地方。此外,你也可以方便地启动/关闭日志功能。
posted on 2006-01-12 12:39
zjw_albert 阅读(152)
评论(0) 编辑 收藏