如何使用log4j.xml
中的属性文件在runtime time
中设置日志级别?
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{ABSOLUTE} %-5p [%c{1}] [%t]: %m%n" />
</layout>
</appender>
<logger name="com.mypackage" additivity="false">
<level value="${level}" />
<appender-ref ref="ConsoleAppender" />
</logger>
我通过将值$level
传递给我vm arguments
来设置值-Dlevel="warn"
,以便记录所有级别警告及以上的消息。
现在我的问题是我必须从properties
文件而不是vm arguments
设置日志级别的值?我怎么能这样做?
P.S:我在java代码中使用common.logging,并将log4j作为配置机制。
答案 0 :(得分:3)
以下是动态更改日志级别的方法:
LogManager.getRootLogger().setLevel(Level.DEBUG);
要使用自定义文件中的属性,请使用Properties.loadFromXML读取包含属性的文件,然后使用这些属性确定级别。
答案 1 :(得分:2)
山姆,
我不确定你要求的是log4j的默认行为。您可以做的是,在应用程序属性文件中添加log4j.rootLogger = DEBUG等属性,并指向log4j以将您的应用程序属性文件用作log4j属性文件。
您可以通过指定以下vm参数强制log4j获取其配置文件:
java -Dlog4j.configuration=resources/log4j_dev.properties
OR
java -Dlog4j.configuration=file:/resources/log4j_dev.properties
log4j属性文件的示例如下:
# Root logger option
log4j.rootLogger=INFO, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
您还可以将xml格式用于属性文件。
如果你想以编程方式为log4j添加记录器(在朗姆酒时间),这就是你需要做的事情:
ConsoleAppender console = new ConsoleAppender(); //create appender
//configure the appender
String PATTERN = "%d [%p|%c|%C{1}] %m%n";
console.setLayout(new PatternLayout(PATTERN));
console.setThreshold(Level.FATAL);
console.activateOptions();
//add appender to any Logger (here is root)
Logger.getRootLogger().addAppender(console);
FileAppender fa = new FileAppender();
fa.setName("FileLogger");
fa.setFile("mylog.log");
fa.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
fa.setThreshold(Level.DEBUG);
fa.setAppend(true);
fa.activateOptions();
/add appender to any Logger (here is root)
Logger.getRootLogger().addAppender(fa)
//repeat with all other desired appenders
希望这有帮助。
答案 2 :(得分:0)
您可以通过读取动态属性文件在System.setProperty中设置日志级别,它将反映在log4j中。
干杯!