2011-12-21 86 views
12

我需要在運行時更改log4j屬性(rootLogger,MaxFileSize等)。 我該怎麼做?在運行時更改log4j屬性

+0

也許這可以幫助:http://www.avajava.com/tutorials/lessons/how-do-i-change-my-log4j-settings-whi le-my-web-application-is-running.html – alonp 2011-12-21 15:46:09

+0

在log4j 2.x中'org.apache.logging.log4j.core.config.Configurator'在某些情況下可能會有所幫助https://logging.apache.org/ log4j/2.x/faq.html#reconfig_level_from_code – 2016-11-23 11:33:54

回答

6

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

另一種方法是構建一個新的appender並用它替換舊的appender(大多數appender不支持更改它們的配置)。這樣,所有的記錄儀(和他們的等級等)保持完好。

爲了這個工作,我通常從代碼(而不是配置文件)中添加第一個appender。這使我可以保存一個引用,使其更容易在稍後刪除。

+0

我不明白。你能解釋得更好嗎?我有五個記錄器使用log4j的配置...我需要更改MaxFileSize(即),併爲我的所有記錄器(運行時)設置此新的道具... – user1110002 2011-12-21 17:10:54

+2

記錄器只是一個關鍵。它沒有MaxFileSize。文件大小是* appender *的一個屬性。 Appender可以附加到伐木工,他們會做一些日誌消息。所以你需要做的是:找到** appenders **(記錄器有方法來獲取所有連接的記錄器),然後你必須替換它們。 – 2011-12-21 17:40:15

+1

好的亞倫。我試着做這個代碼:Logger l = Logger.getLogger(myclass); LogManager.resetConfiguration(); l.setLevel(Level.DEBUG); RollingFileAppender appender = new RollingFileAppender(); appender.setMaxBackupIndex(numberOfLogsToKeep); logger.addAppender(附加器);它不起作用。我怎樣才能改變記錄器的appender? – user1110002 2011-12-21 18:28:13

5

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

它基於我使用下面這個樣子的configureLog4j輔助函數:在運行時

集耶拿日誌記錄級別

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