2011-11-17 938 views
7

Estoy trabajando en una aplicación java muy grande con log4j, y me preguntaba si hay una forma de extraer en tiempo de ejecución la cantidad de registradores activos. ¿O cuáles son los registradores existentes en la aplicación? Mi objetivo final es obtener una lista de todos los registradores y cambiar su nivel en tiempo de ejecución. Gracias.Número de registradores utilizados

Respuesta

6

Usted podría intentar algo como:

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

A continuación, iterar sobre allLoggers.

+0

¿Hay alguna razón para hacerlo '. getRootLogger(). getLoggerRepository() 'dos veces? – unholysampler

+0

¿Es correcto que llame 'getRootLogger(). GetLoggerRepository()' dos veces? –

+0

Lo sentimos, error al formatear el código. Corregido ahora. –

0

para obtener los registradores de utilizar uno de estos

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

para establecer este uso:

logger.setLevel(lev); 
0

o simplemente puede usar el LogManager.getCurrentLoggers() para devolver un registrador Enumeration .loop a través de él y establecer el Nivel de Logger por setLevel()

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