2011-11-17 11 views
7

Pracuję nad bardzo dużą aplikacją java z log4j i zastanawiałem się, czy istnieje sposób na wyodrębnienie w środowisku wykonawczym liczby aktywnych rejestratorów? Lub jakie są istniejące rejestratory w aplikacji? Moim końcowym celem jest uzyskanie listy wszystkich rejestratorów i zmiana ich poziomu w środowisku wykonawczym. Dziękuję.Liczba używanych rejestratorów

Odpowiedz

6

Można spróbować czegoś takiego:

Enumeration allLoggers = Logger.getRootLogger() 
.getLoggerRepository() 
.getCurrentLoggers(); 

następnie iteracyjne nad allLoggers.

+0

Czy istnieje powód, dla którego robisz '. getRootLogger(). getLoggerRepository() 'dwa razy? – unholysampler

+0

Czy to prawda, że ​​dwukrotnie wywołuje się 'getRootLogger(). GetLoggerRepository()'? –

+0

Przepraszam, literówka podczas formatowania kodu. Naprawiono teraz. –

0

dostać rejestratory użyć jednego z tych

Logger rootLogger = LogManager.getRootLogger(); //To get the Root Logger 
Enumeration e = LogManager.getCurrentLoggers(); //To get an enumerated list of loggers 
rootLogger.getName();       //To get the logger by name 
rootLogger.getEffectiveLevel().toString();  //To get the effective level of the current logger 
logger.getParent();        //Get the ccurrent loggers' parent 
//To set a new level for a particular Logger 
Logger logger = Logger.getLogger("TestLogger"); 
L evel lev = Level.toLevel("DEBUG"); 

ustawić użyj:

logger.setLevel(lev); 
0

Albo można po prostu użyć LogManager.getCurrentLoggers() zwrócić Logger Enumeration .Loop przez niego i ustaw Logger poziom przez setLevel()

for (Enumeration<Logger> loggerEnumeratin = LogManager.getCurrentLoggers() ;loggerEnumeratin.hasMoreElements() ;){ 
      Logger logger = loggerEnumeratin.nextElement(); 
      logger.setLevel(Level.ERROR); 
} 
Powiązane problemy