使用log4j为Tomcat输出日志
http://tomcat./tomcat-6.0-doc/logging.html#Using_Log4j 原出处: Geoff Mottram (geoff at minaret dot biz). Placed in the public domain on August 28, 2004 by the author. Last updated: January 27, 2005. This document is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the author be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with this document or the use or other dealings in this document.
简介 注: 最新的log4j 1.3 alpha测试版已经支持每日生成一个日志文件。参考本文相关链接了解如何进行安装和配置。
Tomcat 5.0.x的日志
The data in the Servlet的日志数据是调用ServletContext 类的log()方法产生的,例如: httpServletRequest.getSession().getServletContext().log("Some message");
要保存输出信息到日志文件,你需要在Tomcat的配置文件(Tomcat的conf目录下)
Servlet日志可以打开(配置了FileLogger)和关闭(没有配置FileLogger),但是没有办法指定日志输出级别(只能输出INFO以及更高级别的日志信息)。尽管Tomcat的文档中提到它所有的Logger都支持 如果希望配置Tomcat捕获所有的日志数据,输出到每日生成一个的日志文件(如:在文件名中表明产生日期)。Tomcat中FileLogger提供一种标准方法用于捕获Servlet日志流并每天生成一个新的文件。你可以对日志文件进行备份、删除、分析或者你希望的其它操作。
如果Tomcat再有一个使用Commons Logging接口的Catalina Logger就好了,可以让你更好的控制输出的格式,虽然这个模块很相当容易实现的,但是谁有时间来做啊。后面会告诉大家如何控制
Tomcat 5.5.x的日志 Tomcat 5.5.x比Tomcat 5.0.x的一项改进是Servlet日志不在存在了,Servlet日志是用来接收任何传递给ServletContext 类的log()方法的内容,例如: httpServletRequest.getSession().getServletContext().log("Some message");
Tomcat 5.5.x现在将这些信息通过commons-logging接口输出为INFO级别的日志。如果配置了像log4j这样的logger,你可以把所有的日志信息输入到每日生成的日志文件(如:在文件名中表明产生日期)中,你可以对日志文件进行备份、删除、分析或者你希望的其它操作。
Tomcat通用日志
Log4j
这里描述的配置会导致在Tomcat 5.5.x中创建两个日志文件,在Tomat
5.0.x中创建三个文件:一个是Servlet日志文件(仅对Tomcat
5.0.x),在每天晚上循环产生新的日志文件;第二个是通过log4j输出的Commons
Logging 日志文件(也会在每天晚上循环产生新的日志文件),还有一个是仅仅包含了打印到标准输出和标准错误输出的
注意,
Log4j配置文件 # # Configures Log4j as the Tomcat system logger # to output info level messages into a rolling log file. # log4j.rootLogger=INFO, R # # To continue using the "catalina.out" file (which grows forever), # comment out the above line and uncomment the next. # #log4j.rootLogger=ERROR, A1 # # Configuration for standard output ("catalina.out"). # log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout # # Print the date in ISO 8601 format # log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
# # Configuration for a rolling log file ("tomcat.log"). # log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.DatePattern='.'yyyy-MM-dd # # Edit the next line to point to your logs directory. # The last part of the name is the log file name. # log4j.appender.R.File=/usr/local/tomcat/logs/tomcat.log log4j.appender.R.layout=org.apache.log4j.PatternLayout # # Print the date in ISO 8601 format # log4j.appender.R.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # # Application logging options # #log4j.logger.org.apache=DEBUG #log4j.logger.org.apache=INFO #log4j.logger.org.apache.struts=DEBUG #log4j.logger.org.apache.struts=INFO
你只需要修改这一行:
上面的log4j配置仅记录比较重要的日志(警告warning、错误error、致命错误fatal)到Tomcat的logs目录下的tomcat.log文件中,每天晚上过0点的第一条信息会触发重命名tomcat.log,将当前日期附加在tomcat.log文件名中,并产生新的tomcat.log文件。
使用log4j 注意:新的log4j 1.3.x alpha测试版已经支持按日滚动的日志文件。参考Log4j Version 1.3 and Apache Tomcat了解如何进行安装和配置。 你可以仿照配置文件最后几行的做法来覆盖默认的日志级别,来为你的应用程序做特殊配置。在正式运行环境中,你可能希望尽量减少日志输出,你可以修改这一行:
为:
警告
Tomcat 启动
在启动过程中的一些类载入时,如果你在common/lib目录中加入了完整版的
应用程序日志 例程: package com.acme.webapp;
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;
public class MyApplication {
private Log myLog;
public MyApplication() { myLog = LogFactory.getLog(MyApplication.class); }
public void process() { // Do some processing
myLog.debug("A debug message"); // Do something else
myLog.info("An information message");
// etc. } }
Log对象可以声明为静态的类成员变量,在多个类对象间共享,换句话说,你的整个程序可以共享唯一的一个Log对象,或者多个Log对象,在运行期控制多种日志生成方法。你将类的全限定名称传递给LogFactory.getLog()方法,来唯一标识log对象,在上面的例子中,Log的名字应该是com.acme.webapp.MyApplication。给每个Log对象一个名字,可以在log4.properties中用相同的表示控制日志输出。这样,你可以增加下面一行,为你的应用定义输出DEBUG信息: log4j.logger.com.acme.webapp.MyApplication=DEBUG
可以使用任何字符串来命名Log对象,但是,按照惯例,是用类的class来命名Log对象,参考log4j的FAQ了解命名方法。
tomcat日志改用log4j昨天同事那边出了点故障, 一台tomcat服务器访问出错,tomcat是6.0版本的, 然后想查看tomcat日志却怎么也找不到最近的日志,logs下面 只有08年的几个日志文件。同事感觉很晕, 我也觉着奇怪, 照理说, tomcat默认情况下也是会生成日志文件的, 这回怎么就平白无故的消失了呢? 到网上找了下相关的信息, 网上大部分都是说的如何让tomcat使用log4j。我想tomcat默认用的是jdklogger,如果能换用log4j也不错, 只要日志能生成出文件来。 于是在我的本机环境的tomcat5.5和tomcat6下分别作了实验。 结果,发现tomcat5.5和6在配置log4j的时候还存在差异。 1)tomcat5.5 把 commons-logging和log4j的jar包分别copy到common/lib下面, 再copy一份log4j.properties和commons-logging.properties到common/classes之下, log4j.properties,配置可以如下: 写道 log4j.rootLogger=INFO,stdout,file
## 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} %l - %m%n ## direct messages to file SystemOut.log ### log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=../logs/SystemOut.log log4j.appender.file.Append=false log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %l - %m%n ## block packages that you don't care about ### log4j.logger.org.apache.commons.digester=ERROR log4j.logger.org.apache.commons.beanutils=ERROR log4j.logger.org.apache.commons.modeler=ERROR commons-logging.properties,配置可以如下:
写道
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
#Please refer to the Log implementations in package org.apache.commons.logging.impl# #org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger #org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
重启tomcat之后,就能在logs/下面找到日志文件了。
2)tomcat6 同样的, 也要复制commons-logging和log4j的jar包到tomcat, 不过目标目录不同,位于:${tomcat_home}/lib/; commons-logging.properties和log4j.properties需要复制到${tomcat_home}/lib/目录下;
额外的,还需要到http://www./dist/tomcat/tomcat-6/v6.0.18/bin/extras/ 下载两个包:tomcat-juli.jar,tomcat-juli-adapters.jar tomcat-juli.jar复制到bin下面,替换原有的同名jar包;tomcat-juli-adapters.jar 放到${tomcat_home}/lib/
完成以上步骤之后, 重启tomcat,就能发现已经有了log4j的日志文件产生。
参考资料: http://tomcat./tomcat-5.5-doc/logging.html |
|