Изменить свойства log4j во время выполнения - PullRequest
15 голосов
/ 21 декабря 2011

Мне нужно изменить свои свойства log4j (rootLogger, MaxFileSize и т. Д.) Во время выполнения. Как я могу это сделать?

Ответы [ 2 ]

8 голосов
/ 28 февраля 2015

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);

функция 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);
  }
8 голосов
/ 21 декабря 2011

Используйте LogManager.resetConfiguration(); для очистки текущей конфигурации и повторной настройки.

Другой подход заключается в создании нового приложения и замене старого (большинство приложений не поддерживают изменение конфигурации). Таким образом, все регистраторы (и их уровни, и т. Д.) Останутся нетронутыми.

Чтобы это работало, я обычно добавляю первый аппендер из кода (а не с файлом конфигурации). Это позволяет мне сохранить ссылку, что упрощает ее удаление позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...