1. 程式人生 > >jenkins外掛開發過程中log4j包衝突問題解決過程

jenkins外掛開發過程中log4j包衝突問題解決過程

最近在做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();