java instrment手工加载log4j配置文件
2014-01-11 09:04
225 查看
使用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下部署了多个应用,这种方法不能解决,还需进一步研究。
本文出自 “Ying:好记性不如烂笔头” 博客,请务必保留此出处http://yingtju.blog.51cto.com/3760152/1350764
启动应用的命令行加入-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下部署了多个应用,这种方法不能解决,还需进一步研究。
本文出自 “Ying:好记性不如烂笔头” 博客,请务必保留此出处http://yingtju.blog.51cto.com/3760152/1350764
相关文章推荐
- log4j配置文件加载方式
- WEB系统启动时加载Log4j的配置文件(自己写Listener形式)
- Log4j配置文件解析以及加载自己的配置文件
- Log4j 学习日记 - 手工加载配置文件
- log4j的使用与java中properties配置文件加载
- SpringJUnit4ClassRunner 加载log4j配置文件
- log4j的使用与java中properties配置文件加载
- Spring如何加载log4j配置文件
- log4j配置文件详解及手动加载的方式
- Log4j配置文件解析以及加载自己的配置文件
- log4j加载自定义的日志的配置文件
- [Log4j] Log4j 的配置和配置文件加载顺序
- 如何跟踪Log4j或Sl4j加载哪个配置文件进行初始化
- log4j配置文件加载方式
- Log4j配置文件解析以及加载自己的配置文件
- 关于Log4j不重启重新加载配置文件
- log4j配置文件加载
- 程序自定义加载log4j配置文件
- Log4j配置文件解析以及加载自己的配置文件
- 非web环境log4j配置文件加载路径