在运行时更改log4j属性

use*_*002 15 log4j

我需要在运行时更改我的log4j属性(rootLogger,MaxFileSize等).我怎样才能做到这一点?

Aar*_*lla 8

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

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

为此,我通常从代码中添加第一个appender(而不是配置文件).这允许我保存一个引用,以便以后删除它更简单.

  • 记录器只是一把钥匙.它没有MaxFileSize.文件大小是*appender*的属性.Appenders可以附加到记录器,他们将使用日志消息.那么你需要做什么:找到**appenders**(记录器有方法来获取所有附加的记录器)然后你必须更换它们. (2认同)

Wol*_*ahl 8

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

基于它我使用如下所示的configureLog4j帮助函数,如下所示:

在运行时设置jena日志记录级别

String level=org.apache.log4j.Level.OFF.toString();
if (debug)
  level=org.apache.log4j.Level.INFO.toString();
configureLog4j(level);
Run Code Online (Sandbox Code Playgroud)

configureLog4J函数

  /**
   * 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);
  }
Run Code Online (Sandbox Code Playgroud)