`
luzl
  • 浏览: 571560 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Tomcat+Spring应用系统中log4j配置文件的使用方法

    博客分类:
  • Java
阅读更多
转载自:http://blog.sina.com.cn/s/blog_53edf7c10100ca09.html
  
  
   我建了一个简单的spring项目来练习spring的mvc,但是一直报log4j的异常,后来按照下面文章就解决了。
  


   使用Spring Framework已经快两年了,是从Spring发行包携带的样例程序开始的,从来没有仔细研究过各部分的使用方法。最近才发现使用log4j的方法是不正确的。

   log4j配置文件的存放位置

   跟其他程序环境不同,在Spring Framework应用系统中,log4j配置文件的存放位置是自由的。在应用程序的web.xml中进行规定,[1]使用以下代码:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>

<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>

同时还要设置一个listener
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>


告警的排除

设置好web.xml后,部署WAR文件,发现以下告警:
log4j:WARN No such property [maxFileSize] in org.apache.log4j.DailyRollingFileAppender.
log4j:WARN No such property [maxBackupIndex] in org.apache.log4j.DailyRollingFileAppender.


后来发现一个介绍更为详细的文章[3]学到以下知识:

    * Log4jConfigListener是spring提供的工具类,它开启一个log4j的监视线程,并每60 (log4jRefreshInterval变量定义)秒检测日志配置变化,从而不需要每次重新启动web服务来应用新的配置。它使用 log4jRefreshInterval,所以两者都不是必须的。
    * Log4j提供的appender有以下几种
          o org.apache.log4j.ConsoleAppender(控制台)
          o org.apache.log4j.FileAppender(文件)
          o org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
          o org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
          o org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

可见如果使用DailyRollingFileAppender,maxFileSize和maxBackupIndex是不必配置的。
部署第二个应用时的异常

如果第二个应用也要使用log4j,部署时会出现以下异常:
[ERROR] 23:43:18 [/第二个应用名] - Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener
java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [/usr/share/tomcat5/webapps/第一个应用名/] instead of [/usr/share/tomcat5/webapps/第二个应用名/] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!


根据[2]和[3]的解释,Tomcat跟其他容器(例如:Resin)不同,没有为各个应用分开存放属性,因此必须为"webAppRootKey"分配不同的值,根据[2]的建议,可以使用下面的设置:
<context-param>
<param-name>log4jExposeWebAppRoot</param-name>
<param-value>false</param-value>
</context-param>

根据[3]的建议,可以如下配置:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>应用的别名</param-value>
</context-param>


我采用了后者,因为别名更有用,在别的地方可以使用这个别名。

进一步思考

经过实验,觉得log4j.properties中的设置好像都作为系统属性加载到虚拟机中,这样,如果两个应用有相同的设置内容,第二个部署的设置不起作用。

而且这些配置只有重新启动虚拟机后才能消除,否则,修改了log4j.properties的设置(例如,日志级别)并不即时起作用。也许使用Log4jConfigListener会有用,但是没有实验。

遗留问题

使用Tomcat Manager部署应用时有时会出现以下异常:
2008-11-5 0:06:01 org.apache.catalina.loader.WebappClassLoader loadClass
信息: Illegal access: this web application instance has been stopped already. Could not load org.apache.log4j.PatternLayout. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
....


而且使用Tomcat Manager部署应用时有时产生不了log4j.properties中规定的日志文件。

而重新启动Tomcat后就正常了。
分享到:
评论

相关推荐

    struts2+hibernate+spring+mysql+tomcat+log4j

    Struts2、Hibernate、Spring、Log4j、Tomcat 和 MySQL 是Java Web开发中的关键组件,它们共同构建了一个高效、可扩展的Web应用程序框架。以下是对这些技术的详细解释: **Struts2**:Struts2是一个基于MVC(Model-...

    struts2 + spring + tiles + log4j blank framewotk

    1. **配置文件**:如struts.xml、spring.xml、log4j.properties或log4j.xml,分别用于配置Struts2、Spring和Log4j的行为。 2. **入口点**:如web.xml,配置Servlet容器(如Tomcat)如何加载和初始化这些框架。 3. **...

    springmvc5+hibernate5+junit4+log4j2整合实例

    6. **配置Log4j2**:在项目中添加Log4j2的配置文件(如log4j2.xml或log4j2.json),定义日志级别、输出目的地(如控制台、文件)和格式。 7. **编写业务逻辑**:使用Spring MVC的Controller、Service和DAO组件实现...

    tomcat下struts2的log4j日志配置.doc

    在J2EE应用中,尤其是在Tomcat这样的Servlet容器中使用Log4j,通常需要在Web应用的`web.xml`配置文件中指定日志初始化参数。这可以通过在`web.xml`中添加一个`context-param`元素来实现,将Log4j的配置文件路径作为...

    springboot+mybatis+log4j2

    在项目中,我们需要修改Spring Boot的默认配置,指定使用Log4j2,并在项目的配置文件中(如`log4j2.xml`或`log4j2.json`)定义日志级别、输出格式和目标位置。 在项目中,"springBootMybatis"这个压缩包文件可能...

    java8+tomcat8+struts2.5+spring4.3+hibernate5.2框架搭建详细过程

    &lt;log4j.version&gt;2.5&lt;/log4j.version&gt; &lt;groupId&gt;junit &lt;artifactId&gt;junit &lt;version&gt;4.11 &lt;scope&gt;test &lt;groupId&gt;org.apache.struts &lt;artifactId&gt;struts2-core &lt;version&gt;2.5.1 &lt;groupId&gt;javax....

    log4j与web.xml的配置

    - 在web.xml中,我们可以使用`&lt;context-param&gt;`标签来指定Log4j配置文件的位置,例如: ```xml &lt;param-name&gt;log4jConfigLocation &lt;param-value&gt;/WEB-INF/classes/log4j.properties ``` - 接着,使用`...

    log4j 在web中的应用

    1. **不使用Console Appender**:在log4j配置文件中避免使用Console Appender,只使用File Appender等其他类型的Appender。 2. **修改JBoss的配置**: - 修改`jboss-service.xml`文件中的相应属性,使JBoss不再...

    springBoot+mybatis+mysql+log4j2+swagger-ui.html整合java项目.zip

    项目中的日志文件(如aifasion.log.*)就是由Log4j2生成的,记录了程序运行时的各种信息,包括错误、警告和调试信息,帮助开发者跟踪和诊断问题。 **Swagger-UI** Swagger-UI是一个交互式的API文档工具,它可以将...

    log4j 配置日志文件,把日志信息输出到项目的某个文件夹下

    Log4j是Apache的一个开源项目,它为Java应用程序提供了一个灵活的日志系统。这个系统能够帮助开发者记录程序运行过程中的各种信息,包括错误、警告、调试信息等,这对于软件的调试、性能分析以及问题追踪非常有帮助...

    log4j.properties文件放置在其它目录下

    在 Tomcat 中,log4j.properties 文件通常被放在 src 目录下,这样系统自动会找到该文件的路径是在 WEB-INF/classes 文件下,该目录在 classpath 下,所以直接就能找到。但是,如果我们想把 log4j.properties 文件...

    apache-log4j-2.14.0-bin.zip

    在实际使用中,开发者通常会在应用中引用`log4j-api-2.14.0.jar`和`log4j-core-2.14.0.jar`,并将自定义的配置文件放置在类路径下。配置文件可以指定日志记录的级别(DEBUG、INFO、WARN、ERROR等),选择日志输出的...

    springboot+maven+mybatis+log4j2+idea的框架搭建与多数据库的集成

    在构建现代化的Java Web应用程序时,使用Spring Boot、Maven、MyBatis和Log4j2等技术可以极大地提升开发效率和应用性能。本篇文章将详细介绍如何利用这些工具搭建一个框架,并实现对多个数据库的集成。 首先,让...

    springMVC+Mybatis+quartz+log4j+maven项目

    5. **配置Log4j**:设置Log4j的配置文件,定义日志输出的级别、目的地(如文件、控制台、邮件等)以及日志格式。 6. **实现业务逻辑**:根据需求,使用SpringMVC处理HTTP请求,通过Mybatis执行数据库操作,利用...

    Spring boot+Mybatis+log4j项目实例

    Spring Boot简化了Spring应用程序的初始设置和配置,Mybatis作为轻量级的持久层框架提供了灵活的SQL操作,而Log4j则是广泛使用的日志记录工具,用于追踪应用中的各种事件。 首先,Spring Boot以其“开箱即用”的...

    springboot+mvn+mybaits + log4j

    Log4j的配置文件(log4j.properties或.xml)也需要根据需求进行调整,设置合适的日志级别和输出位置。 对于初学者来说,这个项目提供了一个快速上手SpringBoot的平台,通过实际操作可以深入理解SpringBoot、Maven、...

    Log4j中相对路径的问题

    Log4j是一个广泛使用的...总结来说,Log4j中的相对路径问题可以通过系统属性、环境变量或动态配置来解决,确保日志文件能够在不同环境中被正确写入。这样的灵活性使得开发者无需频繁修改配置,提高了代码的可移植性。

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    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能完成的...

    springmvc+spring+hibernate

    Spring MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们...在实际项目中,可能还需要考虑其他因素,如安全性(Spring Security)、任务调度(Quartz)、日志管理(Log4j)等,以进一步完善系统功能。

    log4j.properties配置详解

    文中提到的是将`log4j-1.2.8.jar`文件加入到项目的`lib`目录下,这样就可以在项目中使用Log4j的功能了。 **步骤2:创建并配置`log4j.properties`文件** 接下来,需要在项目的类路径(`CLASSPATH`)下创建一个名为`...

Global site tag (gtag.js) - Google Analytics