在web中使用log4j

一、将log4j-1.2.13.jar、commons-logging-1.1.1.jar 放入web-inf/lib下

二、在web.xml中配置如下配置片断:


log4jConfigLocation
/WEB-INF/log4j.properties


org.springframework.web.util.Log4jConfigListener

三、log4j详解

1、定义配置文件

Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件log4j.properties(键=值)。下面将介绍使用log4j.properties文件作为配置文件的方法:

、配置根Logger

Logger 负责处理日志记录的大部分操作。

其语法为:

log4j.rootLogger = [ level ] , appenderName, appenderName, …

其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别,优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了INFO级别,只有等于及高于这个级别的才进行处理,则应用程序中所有DEBUG级别的日志信息将不被打印出来。ALL:打印所有的日志,OFF:关 闭所有的日志输出。 appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。

、配置日志信息输出目的地 Appender

Appender 负责控制日志记录操作的输出。

其语法为:

log4j.appender.appenderName = fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1 = value1

…

log4j.appender.appenderName.optionN = valueN

这里的appenderName为在①里定义的,可任意起名。

其中,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),

org.apache.log4j.FileAppender(文件),

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),可通过 log4j.appender.R.MaxFileSize=100KB设置文件大小,还可通过 log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件。

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

例如:log4j.appender.stdout=org.apache.log4j.ConsoleAppender

定义一个名为stdout的输出目的地,ConsoleAppender为控制台。

、配置日志信息的格式(布局)Layout

Layout 负责格式化Appender的输出。

其语法为:

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

log4j.appender.appenderName.layout.option1 = value1



log4j.appender.appenderName.layout.optionN = valueN

其中,Log4j提供的layout有以下几种:

org.apache.log4j.HTMLLayout以HTML表格形式布局),

org.apache.log4j.PatternLayout可以灵活地指定布局模式),

org.apache.log4j.SimpleLayout包含日志信息的级别和信息字符串),

org.apache.log4j.TTCCLayout包含日志产生的时间、线程、类别等等信息

2、格式化日志信息


Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

%m 输出代码中指定的消息

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

%r 输出自应用启动到输出该log信息耗费的毫秒数

%c 输出所属的类目,通常就是所在类的全名

%t 输出产生该日志事件的线程名

%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
%L 输出行号

以下面配置文件为例:

# INFO是level;sfu,console是自定义的两个输出目的地。
log4j.rootLogger = INFO,sfu,console

#log4j.category是对自定义类的设置,可以对类、包和工程单独设置
log4j.category.com.test.demo= INFO,sfu,console
#log4j.additivity是 子Logger 是否继承 父Logger 的 输出源(appender) 的标志位。具体说,默认情况下 子Logger 会继承 父Logger #的appender,也就是说 子Logger 会在 父Logger 的appender里输出。若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。 (如下面包com.test.demo中的代码输出日志只会在定义的输出‘sfu’,’console’中输出)
log4j.additivity.com.test.demo = false


# 定义console输出为控制台输出
log4j.appender.console = org.apache.log4j.ConsoleAppender
## 输出INFO级别以上的日志
log4j.appender.console.Threshold = INFO
#配置日志信息的格式
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
log4j.appender.console.layout = org.apache.log4j.PatternLayout
# %d{HH:mm:ss}输出日期 格式为[时:分:秒] ; [%t]输出线程名;%p输出优先级;%c输出包.类名;%L输出行号;%m 输出代码中指定的消息;%n换行
log4j.appender.console.layout.ConversionPattern = %d{HH:mm:ss} [%t] %p: %c:%L - %m%n
 
# sfu定义为输出到日志文件
log4j.appender.sfu = org.apache.log4j.DailyRollingFileAppender
log4j.appender.sfu.Threshold = INFO
log4j.appender.sfu.file = ${project}/logs/sfu.log
log4j.appender.sfu.datePattern = '.'yyyy-MM-dd
log4j.appender.sfu.layout = org.apache.log4j.PatternLayout
log4j.appender.sfu.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%t] %5p %c:%L - %m%n
log4j.appender.sfu.append = true


其中log4j.appender.sfu.file = ${project}/logs/sfu.log是输出日志到当前工程的相对路径。

需要在web.xml中定义


	webAppRootKey
	project

定义以后,在Web Container启动时将把ROOT的绝对路径写到系统变量里。
然后
log4j的配置文件里就可以用${project}
来表示Web目录的绝对路径,把log文件存放于webapp中。

、在代码中使用Log4j

我们在需要输出日志信息的类中做如下的三个工作:

//1、导入所有需的commongs-logging类:

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

//2、在自己的类中定义一个org.apache.commons.logging.Log类的私有静态类成员:

private final Log log = LogFactory.getLog(getClass());

LogFactory.getLog()方法的参数使用的是当前类的class。

//3、使用org.apache.commons.logging.Log类的成员方法输出日志信息:

if (log.isDebugEnabled())
{
log.debug("111");
}
if (log.isInfoEnabled())
{
log.info("222");
}
if (log.isWarnEnabled())
{
log.warn("333");
}
if (log.isErrorEnabled())
{
log.error("444");
}
if (log.isFatalEnabled())
{
log.fatal("555")
}



你可能感兴趣的:(在web中使用log4j)