如何在运行时从属性文件中设置log4j中的日志级别

时间:2012-12-24 11:09:15

标签: logging log4j jvm-arguments

如何使用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作为配置机制。

3 个答案:

答案 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中。

干杯!