return to homepage.

three ways contact with meemail: contact with me using emailmsn: contact with me using msnQQ: contact with me using QQ

欢迎自由转载,但请注明本blog链接,谢谢合作。

文章分类

成长,转载 (1) 地税 (1) 健康 (2) 趣闻 (1) 生活杂记 (11) 转载 (4) CSS (1) Design Patterns (1) DWR (3) EJB (1) Hibernate (2) javascript (2) Jsp (2) NBA (1) Oracle (2) Struts (4) Tomcat (1) Weblogic (1) XML (1)

2007年4月12日星期四

关于struts中日志的配置问题

考虑到性能问题,不打算引入额外的log4j.jar包。在struts的lib中有一个commons-logging-1.0.4.jar包,现在我来说一下它的运行机制。

在Struts中对日志功能的使用遵循以下的步骤:

  1. 如果你自己导入了log4j.jar包并在WEB-INF/classes目录下添加log4j.properties,即可启用log4j。(注意:不需要加入commons-logging.properties文件;还有如果项目中有spring加入spring会自动加入log4j.jar包)

  2. 如果存在JDK1.4, 使用JDK1.4

  3. 如果两者都不存在,就使用SimpleLog。

现在我重点来说我们这个BSPF项目中用到的比较高性能的SimpleLog类的具体配置。

其实很简单,只要在你的WEB-INF/classes目录中加入两个properties配置文件就OK了。

###这个是commons-logging.properties文件

###指定你要用的日志类

org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog###这个是simplelog.properties文件

###首先指定你的输出级别:必须为"trace", "debug", "info", "warn", "error", or "fatal"

###从trace到fatal级别越来越高,低级包括高级别的日志输出,默认为info

org.apache.commons.logging.simplelog.defaultlog=fatal



###输出的日志消息中是否包含当前日志器实例的简写名字,默认true

org.apache.commons.logging.simplelog.showShortLogname



###输出的日志消息中是否应包含当前时间信息,默认false

org.apache.commons.logging.simplelog.showdatetime



###最后注意一点SimpleLog类把日志输出到System.err中,无需你自己配置

###虽然现在不能到文件中,但以后可以改源码或换成log4j还是比较方便,不用改程序的源码最后再给大家一个example

/**

*

@author


livahu



*

@time


2007-4-12



*/

package org.chinacreator.test;

//必须引入的两个类

import org.apache.commons.logging.LogFactory;

import org.apache.commons.logging.Log; public class LoggingTest {

//SimpleLog会为每个类单独输出一个日志

private static Log log = LogFactory.getLog(LoggingTest.class);

public static void main(String[] args) {

/**

*

大家注意,我没有直接去执行log.trace之类的操作,而是先作了一个判断,这是有道理的。


*

其实无非就是一个性能的问题


*

大家想想,如果我在simplelog.properties文件中org.apache.commons.logging.simplelog.defaultlog=fatal,也就是


*

指定了最高级别,那就没有fatal错误以下的日志输出到System.err了,那我还在调用log.trace方法不是一种多余


*

特别是在里面还有一个String


msg


=


"你想出现的信息",然后再log.trace(msg)这不是对内存开销更大。


*



*/

if (log.isTraceEnabled()) {

log.trace("Test logging trace level");

}

if (log.isDebugEnabled()) {

log.debug("Test logging debug level");

}

if (log.isInfoEnabled()) {

log.info("Test logging info level");

}

if (log.isWarnEnabled()) {

log.warn("Test logging warn level");

}

if (log.isErrorEnabled()) {

log.error("Test logging error level");

}

if (log.isFatalEnabled()) {

log.fatal("Test logging fatal level");

}

}

}

0 评论: