1

如何在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>

我通过传递值来设置$levelfrom my的值,以便记录所有级别为 warn 及以上的消息。vm arguments-Dlevel="warn"

现在我的问题是我必须从properties文件而不是设置日志级别的值vm arguments?我怎样才能做到这一点?

PS:我在 java 代码中使用 common.logging 和 log4j 作为配置机制。

4

3 回答 3

3

这是动态更改日志级别的方法:

LogManager.getRootLogger().setLevel(Level.DEBUG);

要使用自定义文件中的属性,请使用Properties.loadFromXML读取具有属性的文件,然后使用这些属性确定级别。

于 2012-12-26T01:11:41.410 回答
2

山姆,

我不确定您要的是 log4j 的默认行为。您可以做的是,在您的应用程序属性文件中添加诸如 log4j.rootLogger=DEBUG 之类的属性,并指向 log4j 以将您的应用程序属性文件用作 log4j 属性文件。

您可以通过指定以下 vm 参数来强制 log4j 获取其配置文件:

java -Dlog4j.configuration=resources/log4j_dev.properties

或者

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 格式。

如果您想以编程方式(在 rumtime 上)为 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

希望这可以帮助。

于 2012-12-24T11:28:16.460 回答
0

您可以通过读取动态属性文件在 System.setProperty 中设置日志级别,它将反映在 log4j 中。

干杯!

于 2017-07-01T21:16:37.733 回答