在运行时更改 log4j 属性

Change log4j properties at runtime

我需要在运行时更改我的 log4j 属性(rootLogger、MaxFileSize 等)。
我该怎么做?


使用LogManager.resetConfiguration();清除当前配置并重新配置。

另一种方法是构建一个新的 appender 并用它替换旧的 appender(大多数 appender 不支持更改其配置)。这样,所有记录器(及其级别等)都保持不变。

为此,我通常从代码中添加第一个附加程序(而不是使用配置文件)。这让我可以保存一个参考,这样以后删除它就更简单了。


https://github.com/apache/jena/blob/master/jena-tdb/log4j.properties
有一个 log4j 属性文件。

基于此,我正在使用如下所示的 configureLog4j 辅助函数:

在运行时设置jena日志级别

1
2
3
4
String level=org.apache.log4j.Level.OFF.toString();
if (debug)
  level=org.apache.log4j.Level.INFO.toString();
configureLog4j(level);

配置Log4J函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  /**
   * configure Log4J
   * @param level -the level to use e.g."INFO","DEBUG","OFF"
   * see org.apache.log4j.Level
   */
  private void configureLog4j(String level) {
    Properties props = new Properties();
    props.put("log4j.rootLogger", level+", stdlog");
    props.put("log4j.appender.stdlog","org.apache.log4j.ConsoleAppender");
    props.put("log4j.appender.stdlog.target","System.out");
    props.put("log4j.appender.stdlog.layout","org.apache.log4j.PatternLayout");
    props.put("log4j.appender.stdlog.layout.ConversionPattern",
       "%d{HH:mm:ss} %-5p %-25c{1} :: %m%n");
    // Execution logging
    props.put("log4j.logger.com.hp.hpl.jena.arq.info", level);
    props.put("log4j.logger.com.hp.hpl.jena.arq.exec", level);
    // TDB loader
    props.put("log4j.logger.org.apache.jena.tdb.loader", level);
    // Everything else in Jena
    props.put("log4j.logger.com.hp.hpl.jena", level);
    props.put("log4j.logger.org.apache.jena.riot", level);
    // TDB
    // TDB syslog.
    props.put("log4j.logger.TDB", level);
    props.put("log4j.logger.com.hp.hpl.jena.tdb", level);
    props.put("log4j.logger.com.hp.hpl.jena.tdb.transaction", level);
    props.put("log4j.logger.com.hp.hpl.jena.tdb.transaction.NodeTableTrans",
        level);
    props.put("log4j.logger.com.hp.hpl.jena.tdb.transaction.TransactionManager",level);
    props.put("log4j.logger.com.hp.hpl.jena.tdb.transaction.TestTransSystem",level);
    // Joseki server
    props.put("log4j.logger.org.joseki", level);
    LogManager.resetConfiguration();
    PropertyConfigurator.configure(props);
  }