如何将日志添加到可以动态更改日志级别的Java代理程序

时间:2015-12-15 12:27:29

标签: java logging log4j javaagents apache-commons-logging

我需要在javaagent中添加调试点。我在一个班级中使用premain方法,在另一个班级中使用AgentClassFileTransformer。由于我的组织使用以下使用org.apache.commons.logging包的方法,我也尝试使用该方法。

private static final Log log = LogFactory.getLog(InstrumentingAgent.class);

但是,如果我只将 log4j.properties 文件添加到项目的资源文件夹中,它会使用premain方法从类中打印日志。

但对于实现ClassFileTransformer的类,它表示不能找到appender。但是,如果我将 commons-logging.properties 文件添加到同一资源文件夹,那么它将打印控制台中所需的所有日志。 (即使我使用log4j类型的记录器,如下所示,它仍然说没有为Transformer类找到appender)

Commons-logging.properties

org.apache.commons.logging.Log = org.apache.commons.logging.impl.Log4JLogger

Transformer类的警告

log4j:WARN No appenders could be found for logger (InstrumentationClassTransformer).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

在我的情况下,我将在我的代理中添加调试级别日志。但是当代理运行产品时,它不应该在控制台上打印调试日志。就log4j而言,我已阅读有关使用setLevel(Log.level)方法设置记录器日志级别的信息。但由于我使用的是commons-logging的LogFactory,它也没有提供任何设置级别的选项。所以我想就如何克服这种情况提出一些建议。

我怎样才能让它发挥作用?是可以实现的还是我需要更改日志记录机制?

更新1

我甚至添加了包名称,如madhawa所述,但它仍然没有打印ClassFileTransformer的日志。

log4j.rootLogger=DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.logger.org.javaagent.instrumentation=DEBUG

1 个答案:

答案 0 :(得分:0)

您似乎无法正确配置log4j.properties文件。请添加相关软件包,然后重试。