论坛首页 Java企业应用论坛

依赖jar包里的log4j配置将自己应用的log4j.properties屏蔽掉的问题

浏览 8435 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-19  
java世界里的log有多种实现,常用的有log4j和jdk1.4后自带的java.util.logging。

好事的apache弄了个common-logging项目隔离了log4j和logging以及其它的log实现的差异。

这样开源项目库里统一采用common-logging,就可以自行决定在自己的应用中采用何种实现,并跟所依赖的jar包统一起来。

据common-logging的官方文档,决定实现方式的策略如下:
1.首先查找org.apache.commons.logging.Log属性,该属性可以在java代码中设置,更常见的是在classpath下的common-logging.properties文件中进行设置
2.在系统属性中查找org.apache.commons.logging.Log
3.如果类路径中有log4j的jar包,则采用log4j实现
4.如果jdk版本为1.4,采用Jdk14Logger
5.采用common-logging提供的SimpleLog
以上前一步若满足,则以该步骤的结果为准,后面的步骤均不执行。

用maven运行mvn test时,发现我的debug信息都打不出来,只能打出error信息,而且格式怪模怪样的。

检查了我的log4j的log4j.properties里的配置的priority为debug。
以为是maven搞鬼了,打开eclipse,运行test,问题照旧。

移除log4j.properties,现象一样,表明我的log4j.properties未生效。

怀疑我的log实现不是log4j,加入监视信息,打出我的log

Log log = LogFactory.getLog(HyperlinkHandler.class);
System.out.println("log = " + log);


结果确实为org.apache.commons.logging.impl.Log4jLogger。

肯定是依赖的jar包中搞了鬼,祭出了屡试不爽的二分法,一一排查可疑的jar包,终于在该死的jxls-core-0.9.5.jar中发现了log4j.xml,该配置的默认priority为warn:

    <root>
        <level value="WARN"/>
        <appender-ref ref="CONSOLE"/>
    </root>

该配置优先于我的log4j.properties,使可怜的它失去了效果。
   发表时间:2007-10-19  
屡试不爽的二分法! 二分法是什么?想知道。
0 请登录后投票
   发表时间:2007-10-19  
回楼上的,这里二分法就是指缩小排查范围的傻瓜方法
比如问题肯定出在20个jar包中,但不知道是哪个
就先去掉10个jar包,看问题是否存在
如依然存在,就在剩下的10个包中再二分法;否则在去掉的10个jar中继续以二分法排查,一直找到出问题的jar包为止

PS:这个方法的可行性基于排查范围呈几何级的减少,与时下所说的长期基金投资复利的威力有相通之处。
0 请登录后投票
   发表时间:2007-10-19  
手工重新    configure一下即可:


      org.apache.log4j.LogManager.resetConfiguration();
然后:

org.apache.log4j.PropertyConfigurator.configure("c:/yourlog4j.properties");

或者


      org.apache.log4j.xml.DOMConfigurator.configure("c:/yourlog4j.xml");



0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics