一个关于log4j的悲伤的故事

今天调ci环境,log4j报错整了一晚上,然后下班回家自己调试了下,也遇到类似问题

    @Test
    public void testForMq()
    {
        System.out.println("do test");
        log.info("ok");
    }

 

运行mvn test或testng,存在如下问题,且无日志

Running TestSuite
log4j:WARN No appenders could be found for logger (com.netease.qa.cloud.nce.bizTest.test.MqTest).
log4j:WARN Please initialize the log4j system properly.

 

思考方向:十有八九是系统找不到log4j,简单的解决办法,在logger对象生成之前手动指定需要加载的log4j.properties

import org.apache.log4j.PropertyConfigurator;
......
    @BeforeClass
    public static void setUp()
    {
    //加载.properties文件
        PropertyConfigurator pc= new PropertyConfigurator();
        pc.configure("D:\\workspace\\nce-web-test\\src\\log4j.properties");
    }

 

日志生效

do test
[INFO ]22:26:43, [Class]MqTest, [Method]testForMq, ok
do test
[INFO ]22:26:43, [Class]MqTest, [Method]testForMq, ok
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.397 sec

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0

 

手动加代码总是不开心的,哥又开始看官方文档了

Set the resource string variable to the value of the log4j.configuration system property. The preferred way to specify the default initialization file is through the log4j.configuration system property. In case the system property log4j.configuration is not defined, then set the string variable resource to its default value “log4j.properties”.

可以将log4j.configuration设置到环境变量来让log4j读取该配置,如在maven-surefire-plugin中添加如下元素,这样指定路径下的log4j配置就会生效

<systemProperties>
<systemProperty>
<name>log4j.configuration</name>
<value>file:/${basedir}/log4j.properties</value>
</systemProperty>

 

按照官方所说,如果没有设置log4j.configuration,那么就会去取log4j.properties,问题是这个log4j.properties默认放哪呢?

脑中浮现的是电梯间林忆莲的歌词:

万福玛利亚 耶稣基督
释迦牟尼 OM MA PE ME HON
怜悯我吧 告诉我吧
log4j.propertie 放在哪里

有人说放在src下,有人说放在classpath下,终于在Stack Overflow 找到了答案:

If using maven, usually you put log4j.properties under java or resources?
然后把log4j.properties放到resources目录下,结果一切正常了,一个晚上就这么过去了,这就是一个悲伤的故事

 
posted @ 2015-06-17 00:04  opama  阅读(305)  评论(0编辑  收藏  举报