java世界里的log有多种实现,常用的有log4j和jdk1.4后自带的。
好事的apache弄了个common-logging项目隔离了log4j和logging以及其它的log实现的差异。
这样开源项目库里统一采用common-logging,就可以自行决定在自己的应用中采用何种实现,并跟所依赖的jar包统一起来。
据common-logging的官方文档,决定实现方式的策略如下:
1.首先查找属性,该属性可以在java代码中设置,更常见的是在classpath下的文件中进行设置
2.在系统属性中查找
3.如果类路径中有log4j的jar包,则采用log4j实现
4.如果jdk版本为1.4,采用Jdk14Logger
5.采用common-logging提供的SimpleLog
以上前一步若满足,则以该步骤的结果为准,后面的步骤均不执行。
用maven运行mvn test时,发现我的debug信息都打不出来,只能打出error信息,而且格式怪模怪样的。
检查了我的log4j的里的配置的priority为debug。
以为是maven搞鬼了,打开eclipse,运行test,问题照旧。
移除,现象一样,表明我的未生效。
怀疑我的log实现不是log4j,加入监视信息,打出我的log
[code]Log log = ();
("log = " + log);[/code]
结果确实为.Log4jLogger。
肯定是依赖的jar包中搞了鬼,祭出了屡试不爽的二分法,一一排查可疑的jar包,终于在该死的jxls-core-0.9.中发现了,该配置的默认priority为warn:
[code] <root>
<level value="WARN"/>
<appender-ref ref="CONSOLE"/>
</root>[/code]
该配置优先于我的,使可怜的它失去了效果。