【转自】http://hi.baidu.com/injava/blog/item/e353c1cacc469a46f31fe74b.html
简介
为了能够满足我的一个项目中日志输出的特殊要求,我花了好几个小时配置log4j
为Tomcat5.0.28
输出日志。本文说明了一些机制,并且描述了配置Tomcat
每日生成一个日志文件的步骤,涵盖Tomcat5.0.x
和5.5.x
版本。
注
:
最新的
log4j 1.3 alpha
测试版已经支持每日生成一个日志文件。参考本文
相关链接
了解如何进行安装和配置。
Tomcat 5.0
.x
的日志
Tomcat 5.0.x
主要由两个途径记录日志信息。分别为标准日志输出文件catalina.out
和一般情况下在文件名中包含有日期的
Servlet
日志文件(如:catalina.2004-08-27.log
)
。
catalina.out
中的数据主要有三个来源:输出至标准输入和标准错误输出的数据,
通过Commons Logging
接口输出的日志信息,还有一种是包括了Tomcat
各种事件状态和其它系统(如Jakarta Struts
)的输出。使用Commons Logging
接口可以根据配置输出多种多样的日志数据形式。
The data in the Servlet
的日志数据是调用ServletContext
类的log()
方法产生的,例如:
httpServletRequest.getSession().getServletContext().log("Some message");
要保存输出信息到日志文件,你需要在
Tomcat
的配置文件(
Tomcat
的
conf
目录下)
server.xml
中对
FileLogger
配置,一般如下:
<!-- Global logger unless overridden at lower levels -->
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="servlet." suffix=".log" timestamp="true" />
Servlet
日志可以打开(配置了
FileLogger
)和关闭(没有配置
FileLogger
),但是没有办法指定日志输出级别(只能输出
INFO
以及更高级别的日志信息)。尽管
Tomcat
的文档中提到它所有的
Logger
都支持
verbosity
配置项,但是好像没有什么效果。
如果希望配置Tomcat
捕获所有的日志数据,输出到每日生成一个的日志文件(如:在文件名中表明产生日期)。Tomcat
中FileLogger
提供一种标准方法用于捕获Servlet
日志流并每天生成一个新的文件。你可以对日志文件进行备份、删除、分析或者你希望的其它操作。
如果Tomcat
再有一个使用Commons Logging
接口的Catalina Logger
就好了,可以让你更好的控制输出的格式,虽然这个模块很相当容易实现的,但是谁有时间来做啊。后面会告诉大家如何控制
catalina.out
。
Tomcat 5.5
.x
的日志
Tomcat 5.5.x
有两条途径记录日志数据,写入标准输出和标准错误输出的所有内容还是记录在文件catalina.out
,其余的所有日志都通过
Commons Logging
接口输出。如果你没有配置用来其它的Logger
(如log4j
),所有的日志信息(包括通过commons-logging
输出的所有内容)都会输出到catalina.out
,致使其不断增长。
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
通用日志
如上所述,在catalina.out
文件中的大部分数据都是通过调用Commons Logging
接口产生的,Commons Logging
可以让你在运行期对日志输出细节进行控制,并允许使用多种后台日志系统,Tomcat
标准发行版使用SimpleLog
作为日志系统,SimpleLog
将所有的内容都输出到标准错误输出,对于Tomcat
来说,默认被重定向到catalina.out
文件,这样就造成
catalina.out
文件不停的增长,不生成循环的日志文件。
Log4j
Log4j
是支持Commons Logging
的强大日志系统,可以添加到你的Tomcat
中替换SimpleLog
以支持循环的日志文件和多样化的配置。事实上,你不但可以将日志输出到文件,也可以输出到操作系统日志,或者远程机器等其它的目标,你还可以输出至不止一个地方。要在你的Tomcat
中使用log4j
系统可以按照如下步骤进行安装配置(注:这是针对log4j 1.2.x
版本,1.3.x alpha
测试版本的安装和配置可以参考附录中的相关链接
):
- 如果
Tomcat
当前正在运行,关闭
Tomcat
。
- 从
Apache
的网站
下载
Commons Logging
发行包。
- 将压缩包中的
commons-logging.jar
解压缩到你Tomcat
安装路径的common/lib
目录中。
- 从
Apache
的网站
下载
Log4j
发行包。
- 将压缩包中的
log4j-1.2.12.jar
解压缩到你Tomcat
安装路径的common/lib
目录中。
- 在
Tomcat
安装路径的
common/classes
创建
log4j
的配置文件
log4j.properties
(配置文件在随后一节)。
- 重起
Tomcat
这里描述的配置会导致在
Tomcat 5.5.x
中创建两个日志文件,在
Tomat 5.0.x
中创建三个文件:一个是
Servlet
日志文件(仅对
Tomcat 5.0.x
),在每天晚上循环产生新的日志文件;第二个是通过
log4j
输出的
Commons Logging
日志文件(也会在每天晚上循环产生新的日志文件),还有一个是仅仅包含了打印到标准输出和标准错误输出的
catalina.out
文件,这个文件仍然会不断的增长,但是如果你的
Tomcat
应用程序设计的比较好,不是使用标准输出和标准错误输出,这就不成问题了(其实,这个文件应该大小为
0
)。
注意,commons-logging.jar
和log4j.jar
files
是安装在Tomcat
的common/lib
目录中,而log4j.properties
文件是安装在common/classes
目录中。这样的配置可以让Tomcat
和你的Web
应用程序都能够使用log4j
。如果你的Web
应用程序使用Commons Logging
接口,那么其日志数据将会输出到Tomcat
服务的日志中。你也可以修改log4j
的配置文件log4j.properties
,将你的应用程序日志输出到其它文件中(配置方法请参考log4j
的其它文档)。
Log4j
配置文件
log4j.properties
文件可以如下配置:
#
# 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.appender.R.File=/usr/local/tomcat/logs/tomcat.log
将路径修改为你的Tomcat
的logs
目录,如果你的系统环境配置了CATALINA_HOME
环境变量,那么可以使用${catalina.home}/logs/tomcat.log
进行配置即可。
上面的log4j
配置仅记录比较重要的日志(警告warning
、错误error
、致命错误fatal
)到Tomcat
的logs
目录下的tomcat.log
文件中,每天晚上过0
点的第一条信息会触发重命名tomcat.log
,将当前日期附加在tomcat.log
文件名中,并产生新的tomcat.log
文件。
使用log4j DailyRollingFileAppender
不爽的一点是为了产生循环的日志文件,必须输出一条日志信息来触发,如果你每天晚上使用cron
来处理你的日志文件就会存在问题。Tomcat
自带的FileLogger
总是在当天的日志文件名中加上日期来解决这个问题。我(Geoff
)已经写了一个自定义的Log4j appender
来模仿Tomcat
的FileLogger
,大家可以免费使用(包括源代码)。在separate technical tip
有DatedFileAppender
的安装和配置信息。
注意:
新的
log4j 1.3.x alpha
测试版已经支持按日滚动的日志文件。参考
Log4j Version 1.3 and Apache Tomcat
了解如何进行安装和配置。
你可以仿照配置文件最后几行的做法来覆盖默认的日志级别,来为你的应用程序做特殊配置。在正式运行环境中,你可能希望尽量减少日志输出,你可以修改这一行:
log4j.rootLogger=INFO, R
为:
log4j.rootLogger=ERROR, R
警告
在将日志输出级别修改为DEBUG
时一定要小心(特别像log4j.logger.org.apache
),会造成大量的日志,相当大程度上拖慢你的系统速度。
Tomcat
启动
请注意,你必须安装commons-logging.jar
到Tomcat
的common/lib
目录中,你可能已经注意到,在Tomcat
的已经有一个commons-logging-api.jar
文件了
。这个jar
文件是commons-logging.jar
的简版,只实现了SimpleLog
及类似的其它部分,只能基本满足
系统启动时的日志输出,因为没有日志系统的API
,Tomcat
是不能启动的。如果在启动classpath
中没有加入日志系统(如log4j
),是不可以用commons-loging.jar
来进行
替换这个文件的。
在启动过程中的一些类载入时,如果你在common/lib
目录中加入了完整版的commons-logging.jar
,它会替换commons-logging-api.jar
的类,会重新初始化日志系统,并尝试定位log4j
或其它你使用的日志系统
。
应用程序日志
你可以在你的Servlet
程序中使用Servlet
日志(如servletContext.log("Some message")
)来记录消息,或者利用Commons Logging
接口。本节介绍在上述集成后,使用更好的日志方法来演示日志的加强。
例程:
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输出catalina.out日志,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
一直在使用log4j 每天输出到一个日志文件中,该文件名为:“XXX_年月日时分.log”的形式。 这是一个eclipse工程,最简单的配置实现上述功能。
tomcat下struts2的log4j日志配置.doc
#如果一条日志信息的级别大于等于配置文件的级别,就记录配置输出源所对应的辅助类:log4j.appender.输出源名称=类名,如果输出到文件就写FileAppender #指定文件名 Tomcat的根目录: #指定布局方式(消息放入文件...
在Tomcat6下使用Log4j记录日志,天创建新日志文件时(日志文件设置为:org.apache.log4j.DailyRollingFileAppender)报: log4j:ERROR Failed to rename错误; 网上查找了下原因,大概意思是日志文件始终被占有,所以...
Tomcat的详细错误日志不见了,只报一个万恶的Context [] startup failed due to previous errors,却找不到previous errors具体是啥东西
Log4J "Log4J的入门使用 Log4j的配置 输出日志文件 将日志信息存入数据库" Apache JCL "common log介绍 log中的接口" SLF4J "日志门面的使用 日志的绑定 日志的桥接 日志门面的原理" log-back "log-back的日志框架 ...
tomcat控制台详细错误日志设置,有时tomcat控制台报的错误比较模糊,不知道该怎样去找原因,现在好了,按照简单说明配置一下
Tomcat8下使用Log4j接管生成日志文件,按天存放,日志转换成json格式 亲测可用,日志格式如下: {"time":"2017-09-06 10:24:48,356","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deploying...
ubuntu下tomcat中输出日志,log4j替代catalina.out所需配置
log4j.propertis文件中是否设置成ERROR级别 2、把tomcat安装为windows服务的时候,要把jvm内存设置成1G,同时一定要把这些参数加进去。 -XX:PermSize=64M -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=48m -...
先配置将tomcat日志输出到log4j,下载tomcat-juli.jar到tomcat/bin,覆盖原来的jar,下载tomcat-util.jar到tomcat/lib,复制log4mongo-java ,flash-dog-api-log4j 和 mongo-java-driver ,log4j.properties到lib 2....
log4j.propertis文件中是否设置成ERROR级别 2、把tomcat安装为windows服务的时候,要把jvm内存设置成1G,同时一定要把这些参数加进去。 -XX:PermSize=64M -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=48m -...
JFinal 自身对第三方无依赖,但当需要第三方功能支持时则需要添加相应的 jar 文件 1:只有 jfinal-bin-xx.... 而log4j.properties 不存在时无日志输出。jdk logger 需要的logging.properties文件 也在此目录下提供了
运用到的技术:Spring,SpringMVC,Mybatis,Log4J2用来监听日志, 爬取数据模块的日志 PageHelper实现了微信小程序端的上拉继续加载功能 jsoup爬虫技术. 定时任务 : 定时6小时爬取一次数据写入数据库中
--演示了如何在Spring Boot里面使用日志配置,以及logback,log4j2等日志的使用 23 Spring Boot 监控和度量47:09 --Spring Boot内置的监控点、自定义的监控状况检查、自定义度量统计,输出等等 24 Spring Boot ...
3.log4j日志的时间与与系统相差 相差8个小时 上述问题其实是同一个问题。 原因:java获得的时区跟系统的时区不一样 解决方法如下: 1.在代码前加上下面这句话行了:TimeZone tz =TimeZone....
6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant介绍 7.1.1 Ant简介 7.1.2 为什么要使用Ant 7.2 建立Ant的开发环境 7.2.1 下载Ant 7.2.2 配置Ant 7.3 Ant的使用方法 7.3.1 Ant能完成的...
6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant介绍 7.1.1 Ant简介 7.1.2 为什么要使用Ant 7.2 建立Ant的开发环境 7.2.1 下载Ant 7.2.2 配置Ant 7.3 Ant的使用方法 7.3.1 Ant能完成的...