最近在做jenkins插件,关于负载(job分配到节点)均衡问题,使用log4j做日志,但是,在pom.xml中加入log4j依赖包,配置好log4j.properties,在需要输出日志的地方加入代码。以上完成以后怎么也没有日志产生。因为是插件,测试比较复杂,同时也没错误信息日志,只能一步一步过滤可能的bug.
第一:想到log4j.properties配置文件位置错误,log4j.properties需要放在classpath,即根目录下,此插件目录结构不同,应该放在src/main/resources目录下,这样maven打包以后就在根目录下。排除此种可能。
第二:有可能是jar包问题,发现在项目下有两个log4j-over-slf4j-1.7.7.jar,同样存在org.apache.log4j.Logger;当时想到可能import 这个jar包的Logger(此jar包在log4j.jar前面),首先,将此jar包删除,如下:
最下面的scope是test,所以不用删除,上面的是jenkins-core的依赖包,删除这个依赖(在pom.xml中改)。
<dependency>
<groupId>org.jenkins-ci.main</groupId>
<artifactId>jenkins-core</artifactId>
<version>1.625.3</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
问题解决。
附:
log文件的的位置:
Appender appender =Logger.getRootLogger().getAppender("file");
FileAppenderfileappender=(FileAppender)appender;
System.out.println(fileappender.getFile());
该类jar包的位置:
ProtectionDomain pd1 =Logger.class.getProtectionDomain();
CodeSource cs1 =pd1.getCodeSource();
cs1.getLocation().toString();