最近做一个Java Web项目,使用log4j写日志,在网上找了好多天的配置方法,终于弄懂了log4j的日志配置方式。
我的配置很简单,只有控制台日志,以及文件日志(可以将不同级别的日志存放到不同的文件,我的配置是将所有日志存放在同一文件中)。
配置分两步:
web.xml配置
此主要是配置日志配置文件的路径,以及项目根目录变量。我的配置如下:
<!-- 定义应用的根目录 环境变量,系统会将应用根目录存放在webAppRootKey定义的value中,此处是存放在变量webapp.root中-->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root</param-value>
</context-param>
<!-- 设置日志配置文件的路径 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</context-param>
<!-- 日志配置文件刷新时间,由于改了日志配置文件后不需要重启,因此系统会定时去读取配置 -->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>6000</param-value> <!-- 单位为毫秒 -->
</context-param>
<!-- 日志配置文件处理模块,注意该 listener需要放在spring的Listener之前。 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
注意:在web.xml文件中最好要配置webAppRootKey,如果不配置此值,此将是默认值“”,当部署多个项目到同一机器上后,每个项目都使用同一路径,将产冲突。
log4j日志配置文件
我的配置如下:
# ALL 表示输出所有级别的日志,可取的值有DEBUG,INFO,WARN,ERROR,FATAL
# stdout表示要输出控制台日志,此只是一个变量,名字可以不取这个,可以取你想取的值。在后面会用到这个
log4j.rootLogger=ALL,<span style="color:#FF0000;">stdout</span>,<span style="color:#3366FF;">logfile</span>
### output to the console ###
#以下中的stdout是在log4j.rootLogger中定义的
log4j.appender.<span style="color:#FF0000;">stdout</span>=org.apache.log4j.ConsoleAppender
#控制台日志通过System.out输出
log4j.appender.<span style="color:#330033;">stdout</span>.Target = System.out
#要输出的日志级别
log4j.appender.stdout.Threshold = INFO
#指定布局模式,应该与log4j.appender.stdout.layout.ConversionPattern有关,一般按下边这样进行设置就行了
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}-[%p]-[%t:%r] %m%n
### Output to the log file ###
# RollingFileAppender表示文件大小到达指定尺寸的时候产生一个新的文件
# 还可以取值DailyRollingFileAppender,表示每天产生一个日志文件
log4j.appender.<span style="color:#3333FF;">logfile</span>=org.apache.log4j.RollingFileAppender
# webapp.root是在web.xml中配置的<context-param> <param-name>webAppRootKey</param-name> 配置的
log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/gkpy.log
# 指定单个文件的大小,单位还可以KB
log4j.appender.logfile.MaxFileSize=8MB
# MaxBackupIndex: option determines how many backup files are kept before the oldest is erased.
# This option takes a positive integer value. If set to zero, then there will be no
# backup files and the log file will be truncated when it reaches
log4j.appender.logfile.MaxBackupIndex=3
log4j.appender.logfile.Threshold = ALL
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}-[%p]-[%t:%r] %m%n
在elipse中运行tomcat时,日志是放在WorkSpace的临时目录下,并不是放在项目目录下。