2012-01-03 18 views
10

Używam starszej biblioteki, która zapisuje logi przy użyciu log4j. Mój domyślny plik log4j.properties kieruje dziennik do konsoli, ale w niektórych określonych funkcjach mojego głównego programu chciałbym wyłączyć rejestrowanie całkowicie (ze wszystkich klas).Jak wyłączyć logowanie log4j z kodu Java

Próbowałem to:

Logger.getLogger(BasicImplementation.class.getName()).setLevel(Level.OFF); 

gdzie „BasicImplementation” jest jednym z głównych klas, które nie logujących, ale to nie działa - dzienniki są nadal zapisywane na konsoli.

Oto moje log4j.properties:

log4j.rootLogger=warn, stdout 
log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile 
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn 

log4j.appender.stdout = org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n 

log4j.appender.logfile = ac.biu.nlp.nlp.log.BackupOlderFileAppender 
log4j.appender.logfile.append=false 
log4j.appender.logfile.layout = org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n 
log4j.appender.logfile.File = logfile.log 
+1

Jest prawdopodobne, że trzeba wyłączyć rejestrator korzeniowy, ale należy najpierw wysłać 'log4j.properties' /' log4j.xml'. – MaDa

+0

OK, wysłałem to –

Odpowiedz

18

Tak, masz 3 rejestratory zdefiniowane, w tym root:

log4j.rootLogger=warn, stdout 
log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile 
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn 

Niestety, aby je wyłączyć programowo, należy określić wszystkie z nich w kodzie:

Logger.getLogger("ac.biu.nlp.nlp.engineml").setLevel(Level.OFF); 
Logger.getLogger("org.BIU.utils.logging.ExperimentLogger").setLevel(Level.OFF); 
Logger.getRootLogger().setLevel(Level.OFF); 

Here's jak aby zresetować go do tego, co zostało ustawione w pliku konfiguracyjnym.

+0

Świetnie, zadziałało! –

-1

Dodaj poniższe linie do swoich plik dziennika

log4j.logger.com.class.with.package.BasicImplementation = off, logfiledata 

log4j.appender.logfiledata = ac.biu.nlp.nlp.log.BackupOlderFileAppender 
log4j.appender.logfiledata.append=false 
log4j.appender.logfiledata.layout = org.apache.log4j.PatternLayout 
log4j.appender.logfiledata.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n 
log4j.appender.logfiledata.File = logfiledata.log 

Jeśli powyższe nie zostanie zatrzymane, jeśli z logowania, to przynajmniej zarejestruje wszystkie dane z klasy BasicImplementation do osobnego pliku.

+0

-1. Jak u Ricka. – MaDa

6

Można użyć

Logger.getRootLogger().setLevel(Level.OFF); 

aby wyłączyć wszelkie rejestrowanie w kodzie java

+1

Nie będzie działać, jeśli masz niestandardowe rejestratory. – Amos

9

Jeśli chcesz osiągnąć doskonałą ciszę (jak na spokojny narzędzia wiersza poleceń), zawsze można użyć NullAppender.

Logger.getRootLogger().removeAllAppenders(); 
Logger.getRootLogger().addAppender(new NullAppender()); 
+0

Dzięki, działało idealnie dla mnie :) – Ashwin

0

Może tak:

Logger.getRootLogger().shutdown();

Powiązane problemy