2010-10-12 10 views
5

Tengo dos clases en mi proyecto que me gustaría pasar el registrador de la clase principal a la subclase y hacer que la subclase utilice la configuración del registrador principal.Pasar un registrador entre las clases

La subclase es una clase genérica separada (es decir, no está vinculada a la clase principal) y debe ser capaz de crear su propio registrador si no se proporciona uno.

La clase principal crea un registrador, agrega un controlador de consola, manejador de archivos y formateador de registro, y me gustaría que la subclase pueda anular temporalmente el formateador de registro para sus mensajes de registro y luego cuando la clase principal se reanude , vuelve a su formateador de registro.

He intentado adaptar el registrador a la subclase, o crear uno nuevo si es necesario, pero recibo varios mensajes en la pantalla y en el archivo de registro (parece que está agregando los manejadores a la clase principal en lugar de dominarlo).

¿Cómo voy a hacer esto?

Respuesta

10

Supongo que está utilizando el paquete java.util.logging. En ese caso, cuando y donde quiera que use Logger.getLogger (someString) obtendrá la misma instancia de Logger.

Por ejemplo: si en la clase Principal utiliza Logger log = Logger.getLogger ("myLogger"); , puedes obtener el mismo registrador en cualquier otra clase usando Logger.getLogger ("myLogger");

+0

por lo que no necesita pasar el registrador y establecer la instancia registrador? p. private void setLogger (Logger logger) { this.logger = logger; } – Omertron

+0

Ok, así que lo hice, cambié el método para aceptar el nombre de cadena del registrador. Ahora necesito redirigir el logFormatter de la clase principal al formateador de mi clase local, pero ahora "sobrescribe" el formateador de la clase principal – Omertron

+0

Bueno, podría "guardar" el formateador del registrador original (Principal), por ejemplo como un campo de subclase, y volver a configurarlo cuando haya terminado de usarlo en la subclase. Diría que es lo suficientemente seguro si no hay paralelismo. Sin embargo, la práctica recomendada es que todas las clases deben usar su propio registrador y obtener sus propias instancias usando Logger.getLogger (LocalClass.class.getName()). – cbaby

0

Esto es lo que tengo hasta ahora:

public void setLogger(String loggerName) { 
    MySubClass.logger = Logger.getLogger(loggerName); 

    for (Handler handler : logger.getHandlers()) { 
     handler.setFormatter(tmdbFormatter); 
    } 
    logger.setUseParentHandlers(true); 
    logger.setLevel(Level.ALL); 
} 
Cuestiones relacionadas