`

log4j日志冲突问题

    博客分类:
  • Java
 
阅读更多

 

 

1.tomcat shared目录中的log4j.jar与war包中的log4j.jar冲突导致程序异常及日志信息异常



 

2.多项目共同使用一个log4j.jar带来的问题

 

 

 

http://zhidao.baidu.com/link?url=dg4KwaCEpiDTweFbMg_LgtX88XZnmdGb1Aq6nHfA59o0Ssytj-vtb9Pkj2Nk7VQ6HESMR_yeJ4_mlHIB8kLbxK

tomcat中多个应用共用jar的情况下,如何为每个应用配置log4j.properties

2012-07-31 16:35tjmljw  分类:JAVA相关 | 浏览 2294 次
1.项目A中有一个log4j.properties(配置为把日志输出到以项目名称命名的文件夹中)
2.为了减轻tomcat负担,把项目A的WEB-INF/lib下的所有jar文件拷贝到tomcat下的lib中并修改catalina.properties对其加载
3.把项目A复制一份为项目B
4.然后把项目A和项目B同时发布在tomcat中(发布时删除了WEB-INF/lib)
访问项目A和项目B,发现两个应用的日志全部输出到了项目A的文件夹中。
顺便说一下,如果把项目需要的jar放在WEB-INF/lib中,则不会出现上述的问题。
在所有的jar文件都拷贝到tomcat/lib中的前提下,如何使得各个应用的log4j.properties生效呢??
目前知道的是,两个工程中的log4j.properties的确都被加载了,只是最后一个被加载的log4j.properties覆盖了前面加载的配置,也就是说只有最后被加载的生效了。
 
2012-07-31 18:27
 
提问者采纳
 
这个问题可能是这样的,由于你的log4j的包被放在了公共的目录下,因此tomcat在加载的时候,只加载这一份log4j相关类,而这一份log4j类在初始化过程中会读取你的日志输出路径,由于这个类被加载了一份,因此它本身也只能加载一份配置的输出路径(后面加载的覆盖前面加载的)。
 
你以往将log4j放在每个项目下,tomcat会创建多个classloader来负责加载每个项目路径中的类,而不同的log4j类当然就可以分别加载到不同的log4j properties文件,实现每个项目的单独输出。
 
不知你们项目为何一定要将所有的jar都归集到一处,我觉得你们可以单独把log4j这个包分开在各个项目中来实现这个功能。
追问:
我曾试着提取log4j到WEB-INF中,但是加载tomcat/lib中的某些类时会提示找不到log4j,我想是因为类加载器加载顺序的问题。
追答:
tomcat的加载规则和普通的类加载双亲委派不同。它是自身层级的加载器先加载,加载不到再委托父加载器。你放在tomcat的lib文件夹里的会被common classloader加载,而放在项目文件夹中的会被webapp classloader加载。commmo classloader是webapp classloader的父加载器,因此commmo classloader在加载自己路径中的类时,如果碰到log4j加载不到,只会委托自己的父加载器,也就是Application classloader去加载,而不会委托webapp classloader去加载,自然也就无法加载到你项目Lib中的log4j,你尝试一下把你的项目lib中和tomcat的lib中都放入log4j试试吧。
追问:
项目lib中和tomcat的lib中都放入log4j后,因为不同的classloader,加载时会出错,(部分)异常如下:
log4j:ERROR "org.apache.log4j.RollingFileAppender" was loaded by [WebappClassLoader
  context: /dasp-mts-gerb
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@d9ceea
].
还有没有其它办法呢?
追答:
想不出什么好的办法了。。
如果log4j通过公有类加载器加载一份,那路径就只有一个。
如果log4j分别被项目私有的类加载器加载,但是其他包被公有类加载器加载,那么其他包就加载不到log4j,因为公有类加载器无法去委派子加载器去加载。
如果log4j被公有类加载器和项目的私有类加载器加载,又会引发冲突。。
这个问题本身就非常纠结啊,感觉你们把所有的包都归集到一处,又把日志分开打,还是有点不科学。。如果要把包全部作为公有的,日志估计也就只能作为公有让所有项目共享了。。
  • 大小: 642.9 KB
分享到:
评论

相关推荐

    浅谈spring boot 集成 log4j 解决与logback冲突的问题

    现在很流行springboot的开发,小编闲来无事也学了学,开发过程中遇见了log4j日志的一个小小问题,特此记载。 首先在pox.xml中引入对应的maven依赖: <!-- 引入log4j--> <groupId>org.springframework....

    Log4j WebSphere V7 配置说明

    在websphere下,log4j打印的内容会被was接管,导致在tomcat下可以正常使用的log4j配置方法,在websphere下不打印任何日志到目标路径,本方法可以解决此问题并且是几乎所有开源jar包在websphere上碰上冲突时的标准...

    log4j.jar和commons-logging.jar

    配置日志文件时需要的jar包,配置日志文件时需要的jar包,配置日志文件时需要的jar包

    slf4j-Logging

    几乎在每个jar包里都可以看到log4j的身影,在多个子工程构成项目中,slf4j相关的冲突时不时就跳出来让你不爽,那么slf4j-api、slf4j-log4j12还有log4j他们是什么关系?我把自己了解的和大家简单分享一下: slf4j:...

    SSH入门实战式课程 SSH框架前言全套视频实战精讲视频教程.txt

    │ 北京动力节点SSH前言-017-Log4j-日志的用途及Log4j.mp4 │ 北京动力节点SSH前言-018-Log4j-日志基础.mp4 │ 北京动力节点SSH前言-019-Log4j-Log4j用法.mp4 │ 北京动力节点SSH前言-020-Log4j-Log4j2用法.mp4 │ ...

    findConflicts:冲突的Maven插件(查找Maven项目冲突的Maven插件)

    我们都知道,java的日志包多种,象log4j,logback,slf4j,通用日志,log4j-over-slf4j,slf4j-over-log4j12等。这些包非常容易混在一起。最终的后果是,突然有一天你的应用系统就打印不出来日志了,更糟糕的是,你...

    sofa-common-tools:Sofa-common-tools是一个向其他SOFA库提供一些实用程序功能的库

    在这种情况下,您不能选择log4j2以外的日志实现(如果选择Logback,则日志实现会冲突)。 一些可用的解决方案: 该jar使用日志外观代替日志实现,但是应用程序开发人员仍然必须提供日志配置该jar以编程方式初始化...

    hibernatelib.rar

    hibernate的jar包,希望对大家...还包含Log4j日志包.并且和课程基本配套.因为最新版jar包有和课程想冲突的地方.会产生莫名其妙的bug , 所以这个jar包经本人验证是所以版本里最耐操的!希望对大家的学习能起到正面的作用.

    dy-agent:基于Bytebuddy的Java Agent AOP框架

    dy-agent-log4j:为了不与目标应用的日志框架产生冲突,自己实现的log4j。如何添加新的拦截器继承AbstractMethodInterceptor类,需要override两个方法: focusOn 以及 match。focusOn在focusOn中定义需要拦截的特定类...

    Jboss7.1.1Final下JSP热部署解与多工程并行、消除WEB工程名

    附件提供一个jar、两个xml、一个文档,分别实现jsp热部署(默认情况下jboss修改了JSP还需要重启)、占用根目录“/”无需使用工程名(即使用http://127.0.0.1:8080直接访问...全部无法启动)、日志及Console托管给Log4J。

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...

    微软活动目录管理管理简明手册

    R5 I* ~: k6 g1 B$ @4 Z- j' B ( y: ] o$ r9 C( \/ x5 b @: a站点(Site)是由一个或多个IP子网中的一组计算机,确保目录信息的有效交换,站点中的计算机需要很好地连接,尤其是子网内的计算机。站点和域名称空间...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    第19章 使用log4j进行日志操作 564 19.1 log4j介绍 564 19.1.1 logger组件 564 19.1.2 appender组件 566 19.1.3 layout组件 567 19.2 使用log4j 568 19.3 log4j使用实例 572 19.4 ndc和mdc 585 19.5 小结 ...

    java8源码-private-cloud-storage:一个简单实用的云存储服务器

    日志配置文件位于:src/main/resources/log4j.properties 可以脱离Tomcat环境,直接打包为Jar包,使用Maven的Package命令即可 功能介绍 文件上传、下载:支持文件的上传下载,上传时通过文件内容MD5来防止重复源文件...

    ibatis 开发指南(pdf)

    在 CLASSPATH 中新建log4j.properties 配置文件,内容如下: log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log...

    HGE_系列教材(1-9)

    System_Log 在日志文件中书写格式化消息 System_Launch 运行一个URL 或者外部的可执行文件或数据文件 System_Snapshot 截屏并保存到一个文件 3. 资源函数(Resource functions): Resource_Load 从硬盘上读取资源到...

    oracle数据库经典题目

    系统触发器主要是DML事件和系统事件发生时调用的触发器,其中DML事件包括CREATE、DROP、ALTER等,系统事件包括LOGON、LOGOFF、STARTUP、SHUTDOWN、SERVERERROR等。 9.简述Oracle数据库角色的种类、作用,以及如何...

    Maven权威指南 很精典的学习教程,比ANT更好用

    冲突解决 9.4.6. 依赖管理 9.5. 项目关系 9.5.1. 坐标详解 9.5.2. 多模块项目 9.5.3. 项目继承 9.6. POM最佳实践 9.6.1. 依赖归类 9.6.2. 多模块 vs. 继承 9.6.2.1. 简单项目 9.6.2.2. 多模块企业级...

Global site tag (gtag.js) - Google Analytics