2011-11-17 7 views
7

Sto lavorando a un'applicazione java molto grande con log4j e mi chiedevo se esiste un modo per estrarre in runtime il numero di logger attivi? O quali sono i logger esistenti nell'applicazione? Il mio obiettivo finale è ottenere un elenco di tutti i logger e modificarne il livello in fase di esecuzione. Grazie.Numero di logger utilizzati

risposta

6

Si potrebbe provare qualcosa di simile:

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

Poi iterare allLoggers.

+0

C'è un motivo per cui lo si fa? getRootLogger(). getLoggerRepository() 'due volte? – unholysampler

+0

È corretto che tu chiami 'getRootLogger(). GetLoggerRepository()' due volte? –

+0

Ci scusiamo, errore di battitura durante la formattazione del codice. Risolto ora. –

0

per ottenere i taglialegna utilizzare uno di questi

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

per impostare l'uso questo:

logger.setLevel(lev); 
0

o si può semplicemente utilizzare il LogManager.getCurrentLoggers() per restituire un Logger Enumeration .Loop attraverso di essa e impostare il Livello Logger di setLevel()

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