Change log4j properties at runtime

后端 未结 2 982
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-05 19:06

I need to change my log4j properties (rootLogger, MaxFileSize, etc.) at runtime. How can I do this?

2条回答
  •  星月不相逢
    2020-12-05 19:56

    https://github.com/apache/jena/blob/master/jena-tdb/log4j.properties has a log4j properties file.

    Based on it I am using the configureLog4j helper function shown below like this:

    set jena logging level at runtime

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

    configureLog4J function

      /**
       * 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);
      }
    

提交回复
热议问题