2011-12-21 28 views
12

muszę zmienić swoje właściwości Log4J (rootLogger, MaxFileSize, itd.) W czasie wykonywania. Jak mogę to zrobić?Zmiana właściwości w czasie wykonywania log4j

+0

Może to może pomóc: http://www.avajava.com/tutorials/lessons/how-do-i-change-my-log4j-settings-whi le-my-web-aplikacji-is-running.html – alonp

+0

W log4j 2.x 'org.apache.logging.log4j.core.config.Configurator' mogą być pomocne w niektórych przypadkach https://logging.apache.org/ log4j/2.x/faq.html # reconfig_level_from_code –

Odpowiedz

6

Stosować LogManager.resetConfiguration(); aby usunąć bieżący config i skonfigurować go ponownie.

Innym rozwiązaniem jest zbudowanie nowego appender i zastąpić stary z nim (większość appenders nie obsługują zmianę ich config). W ten sposób wszystkie rejestratory (i ich poziomy itd.) Pozostają nienaruszone.

Aby to działało, zwykle dodać pierwszy appender z kodu (a nie z pliku konfiguracyjnego). To pozwala mi zapisać referencję, co ułatwia jej późniejsze usunięcie.

+0

Nie zrozumiałem. Czy możesz wyjaśnić lepiej? Mam pięć rejestratora za pomocą konfiguracji log4j ... Muszę zmienić MaxFileSize (tj) i ustawić nowy rekwizyt dla wszystkich moich wywożący drewno (przy starcie) ... – user1110002

+2

Rejestrator jest tylko klucz. Nie ma MaxFileSize. Rozmiar pliku jest własnością * aplikanta *. Dodatki mogą być dołączone do rejestratorów i będą robić coś z komunikatami dziennika. Więc co musisz zrobić: Znajdź ** aplikantów ** (loggers mają metody, aby uzyskać wszystkie dołączone rejestratory), a następnie musisz je zastąpić. –

+1

Ok Aaron. Spróbowałem zrobić z tym kodem: Logger l = Logger.getLogger (myclass); LogManager.resetConfiguration(); l.setLevel (Level.DEBUG); RollingFileAppender appender = new RollingFileAppender(); appender.setMaxBackupIndex (numberOfLogsToKeep); logger.addAppender (appender); To nie działa. Jak mogę zmienić dostawcę mojego loggera? – user1110002

5

https://github.com/apache/jena/blob/master/jena-tdb/log4j.properties zawiera plik właściwości log4j.

W oparciu o nią używam funkcji configureLog4j pomocnika pokazany poniżej tak:

zestaw poziom rejestrowania Jena przy starcie

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

funkcja 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); 
    } 
Powiązane problemy