转 http://www.car.com.blog.163.com/blog/static/361458462008623659715/
为了能够满足我的一个项目中日志输出的特殊要求,我花了好几个小时配置log4j为Tomcat5.0.28输出日志本文说明了一些机制,并且描述了配置Tomcat每日生成一个日志文件的步骤,涵盖Tomcat5.0.x和5.5.x版本
最新的log4j 1.3 alpha测试版已经支持每日生成一个日志文件参考本文相关链接了解如何进行安装和配置
Tomcat 5.0
Tomcat 5.0.x主要由两个途径记录日志信息分别为标准日志输出文件Servlet日志文件(如:catalina.2004-08-27.log)
catalina.out中的数据主要有三个来源:输出至标准输入和标准错误输出的数据,通过接口输出的日志信息,还有一种是包括了Tomcat各种事件状态和其它系统(如)的输出使用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就好了,可以让你更好的控制输出的格式,虽然这个模块很相当容易实现的,但是谁有时间来做啊后面会告诉大家如何控制
Tomcat 5.5
Tomcat 5.5.x有两条途径记录日志数据,写入标准输出和标准错误输出的所有内容还是记录在文件接口输出如果你没有配置用来其它的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文件,这样就造成
Log4j
Log4j是支持Commons Logging的强大日志系统,可以添加到你的Tomcat中替换SimpleLog以支持循环的日志文件和多样化的配置事实上,你不但可以将日志输出到文件,也可以输出到操作系统日志,或者远程机器等其它的目标,你还可以输出至不止一个地方要在你的Tomcat中使用log4j系统可以按照如下步骤进行安装配置(注:这是针对log4j 1.2.x版本,1.3.x alpha测试版本的安装和配置可以参考附录中的):
将压缩包中的commons-logging.jar 将压缩包中的log4j-1.2.12.jar解压缩到你Tomcat安装路径的common/lib目录中 在Tomcat安装路径的common/classes创建log4j的配置文件log4j.properties(配置文件在随后一节)
这里描述的配置会导致在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.#
# To continue using the "catalina.out" file (which grows forever),
# comment out the above line and uncomment the next.#
# 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#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,大家可以免费使用(包括源代码)在有
注意:新的log4j 1.3.x alpha测试版已经支持按日滚动的日志文件参考了解如何进行安装和配置
你可以仿照配置文件最后几行的做法来覆盖默认的日志级别,来为你的应用程序做特殊配置在正式运行环境中,你可能希望尽量减少日志输出,你可以修改这一行:
log4j.rootLogger=INFO, R
为:
log4j.rootLogger=ERROR, R
警告
在将日志输出级别修改为DEBUG时一定要小心(特别像log4j.logger.org.apache),会造成大量的日志,相当大程度上拖慢你的系统速度
Tomcat
请注意,你必须安装commons-logging.jar到Tomcat的common/lib目录中,你可能已经注意到,在Tomcat的已经有一个这个jar文件是commons-logging.jar的简版,只实现了SimpleLog及类似的其它部分,只能基本满足系统启动时的日志输出,因为没有日志系统的API,Tomcat是不能启动的如果在启动classpath中没有加入日志系统(如log4j),是不可以用替换这个文件的
在启动过程中的一些类载入时,如果你在common/lib目录中加入了完整版的commons-logging.jar,它会替换commons-logging-api.jar的类,会重新初始化日志系统,并尝试定位log4j或其它你使用的日志系统
应用程序日志
你可以在你的Servlet程序中使用Servlet日志(如servletContext.log("Some message"))来记录消息,或者利用Commons Logging接口本节介绍在上述集成后,使用更好的日志方法来演示日志的加强
例程:
package com.acme.webapp;public class MyApplication {myLog = LogFactory.getLog(MyApplication.class);
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 日志配置详解 在日常的 Web 开发中,日志记录对于调试问题、监控系统状态以及后期维护来说至关重要。在使用 Apache Tomcat 作为服务器时,合理配置日志框架(如 Log4j)能够极大地提高开发...
tomcat6.0 配log4j日志的必须文件及配置过程 tomcat6-------lib | |--------tomcat-juli-adapters.jar | |--------log4j.jar | |--------log4j.properites | |----bin |--------tomcat-juli.jar 最后把log4...
### Log4j日志配置详解 #### 一、概述 Log4j 是一个基于 Java 的开源日志记录框架,由 Apache 软件基金会维护。它允许开发人员根据等级记录日志信息,使得用户能够控制日志信息的记录级别及去向。本文将通过一份...
四、在 Maven 项目中引入 Log4j 依赖 在 Maven 项目中,需要引入 Log4j 依赖项,以便使用 Log4j。下面是一个基本的 Maven 依赖项配置: ``` <groupId>log4j <artifactId>log4j <version>1.2.16 ``` 这个配置...
《深入理解Log4j日志打印》 在Java开发领域,日志打印是不可或缺的一环,它对于系统调试、性能监控、故障排查等都起着至关重要的作用。Log4j作为Java中最常用的日志框架之一,深受广大开发者喜爱。本文将深入探讨...
在“log4j日志.zip”压缩包中,包含的可能是Log4j的配置文件(如log4j.properties或log4j.xml)。这个文件定义了日志的级别、输出位置和格式。例如: ```properties # log4j.properties 示例 log4j.rootLogger=...
《深入理解Log4j日志框架》 在Java开发领域,日志系统是不可或缺的工具,它用于记录程序运行过程中的各种信息,帮助开发者在问题出现时定位和解决问题。Log4j作为Apache软件基金会的一个开源项目,是Java世界中最...
Log4j 是一款广泛使用的Java日志记录框架,它提供了灵活的日志配置和丰富的日志级别,便于开发者调试和监控应用程序。在Java开发过程中,如果遇到"log4j:WARN Please initialize the log4j system properly"这样的...
logstash采集log4j日志发送到es配置文件,可以把日志根据日志级别区分开,一个级别一条日志是es中的一条数据
本文将详细讨论如何解决Log4j日志文件出现的乱码问题。 首先,我们要理解Log4j的工作原理。Log4j允许开发者自定义日志输出的方式,包括输出到控制台、文件、数据库等。它使用了`QuietWriter`类来写入日志,`...
### Log4j日志管理详解 #### 一、Log4j概述 Log4j是一款流行的开源日志框架,由Apache软件基金会提供。它允许开发者在应用程序中加入日志功能,以便于跟踪程序运行过程中的各种状态信息。Log4j的核心设计理念在于...
当我们遇到“无法打出log4j日志的问题”,这通常是由于配置、环境或代码实现中的某些错误导致的。这篇长文将深入探讨如何排查和解决这类问题。 首先,我们要理解Log4j的基本工作原理。Log4j通过配置文件(通常是log...
通过`log4j.properties`或`log4j.xml`配置文件,可以定制日志输出的级别、目的地和格式,从而满足不同项目的需求。在实际开发中,正确地使用和配置`log4j`能显著提升问题排查和系统监控的效率。
Flume-ng 在 Windows 环境搭建并测试 + Log4j 日志通过 Flume 输出到 HDFS Flume-ng 是一个高可用、可靠、分布式的日志聚合系统,可以实时地从各种数据源(如日志文件、网络 socket、数据库等)中收集数据,并将其...
【SSH+Maven+Bootstrap视频教程】第18章主要讲解了如何测试并应用Log4j日志框架,这是Java开发中的一个关键组件,尤其在系统监控、调试和错误跟踪方面发挥着重要作用。Log4j是Apache软件基金会的一个开放源代码项目...
**日志库Log4j详解** 日志在软件开发中起着至关重要的作用,它能够帮助开发者追踪程序运行状态,定位错误,优化性能,并且在生产环境中为运维人员提供宝贵的诊断信息。Log4j,由Apache软件基金会开发,是Java编程...
Log4j作为Java领域广泛应用的日志框架,提供了强大的日志记录功能和灵活的配置。本文将深入探讨log4j的配置以及配置文件的详解。** 首先,我们要理解什么是`log4j.properties`文件。这是log4j框架的配置文件,使用...
以下是对Log4j日志的详细讲解: 首先,要在项目中启用Log4j,需要创建一个名为`log4j.properties`的配置文件,将其放在`classes`目录下。这个文件用于定义Log4j的行为,包括日志的级别、输出目的地、格式等。 1. *...
在深入探讨Log4j日志等级之前,我们首先需要了解Log4j是什么。Log4j是Apache的一个开源项目,用于Java应用程序的日志记录。它提供了一种高度灵活且功能强大的日志解决方案,允许开发者和系统管理员自定义日志级别、...
要实现动态设置Log4j日志级别,通常有以下几种方法: 1. **通过配置文件**:最常见的方式是通过修改log4j.properties或log4j.xml配置文件。例如,你可以将某个类或整个包的日志级别设置为WARN: ```xml ```...