浏览 8441 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-10-19
好事的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,使可怜的它失去了效果。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-10-19
屡试不爽的二分法! 二分法是什么?想知道。
|
|
返回顶楼 | |
发表时间:2007-10-19
回楼上的,这里二分法就是指缩小排查范围的傻瓜方法
比如问题肯定出在20个jar包中,但不知道是哪个 就先去掉10个jar包,看问题是否存在 如依然存在,就在剩下的10个包中再二分法;否则在去掉的10个jar中继续以二分法排查,一直找到出问题的jar包为止 PS:这个方法的可行性基于排查范围呈几何级的减少,与时下所说的长期基金投资复利的威力有相通之处。 |
|
返回顶楼 | |
发表时间: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"); |
|
返回顶楼 | |