歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java instrment手工加載Log4j配置文件

使用java instrument做一個代碼監控的工具,監控日志想用log4j記錄,遇到了點問題。

啟動應用的命令行加入-javaagent參數,可以在加載類時對其字節碼做修改,常用工具有asm、javasssit。

我希望能額外加載用於監控的log4j的配置,但發現如果在instrument類中手工加載了監控的log4j配置,應用程序使用Logger.getLogger(“xx”)時,不會去classpath下查找應用log4j.properties並加載,而是報了not found root logger的警告。

1.    Jar包的METEINFO.MF配置
需要配置:
Premain-Class: com.PerfMonAgent
Boot-Class-Path: ./ lib/log4j-1.2.14.jar lib/javassist-3.18.GA.jar

使用maven打包做如下配置即可:
<build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
              <configuration>
                  <archive>
                      <manifestEntries>
                          <Premain-Class>com.PerfMonAgent</Premain-Class>
                          <Boot-Class-Path>./ lib/log4j-1.2.14.jar lib/javassist-3.18.1-GA.jar</Boot-Class-Path>
                      </manifestEntries>
                  </archive>
              </configuration>
          </plugin>
      </plugins>
  </build>

目錄結構
lib
|-log4j-1.2.14.jar
|-javassist-3.18.GA.jar
log4j.properties
log4j_monitor.properties
logs
monitor.properties
monitor.jar

2.    Premain先加載應用配置,在加載監控配置
Logger.getRootLogger(); //使用PropertyConfigurator也可以
PropertyConfigurator.configure(configFile);

3.    問題
由於在Bootstrap階段做log4j的類加載、配置加載,log4j的配置對所有應用都是共享的,如果server下部署了多個應用,這種方法不能解決,還需進一步研究。

Copyright © Linux教程網 All Rights Reserved