2009-02-06 8 views
5

Estoy configurando el registro para una aplicación Java. Lo que pretendo es dos registros: uno para todos los mensajes y otro solo para mensajes por encima de cierto nivel.Registros separados de INFO y ERROR de java.util.logging

La aplicación usa las clases java.util.logging.*: la estoy usando como está, por lo que estoy limitado a la configuración a través de un archivo logging.properties.

no veo una manera de configurar dos manejadores de archivos de forma diferente: la documentación y ejemplos que he visto propiedades establecidas como:

java.util.logging.FileHandler.level = INFO 

Mientras yo quiero dos manejadores de diferentes madereras en diferentes niveles a diferentes archivos.

¿Alguna sugerencia?

Respuesta

4

http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/overview.html es útil. Solo puede establecer un nivel para cada registrador individual (como puede ver en el método setLevel() en el registrador). Sin embargo, puede tomar el más bajo de los dos niveles comunes y luego filtrar mediante programación.

Desafortunadamente, no puede hacer esto solo con el archivo de configuración. Para cambiar solo con el archivo de configuración, deberá cambiar a algo como log4j, que ha dicho que no es una opción.

Así que sugeriría la alteración de la tala en el código, con los filtros, con algo como esto:

class LevelFilter implements Filter { 
    private Level Level; 
    public LevelFilter(Level level) { 
     this.level = level; 
    } 
    public boolean isLoggable(LogRecord record) { 
     return level.intValue() < record.getLevel().intValue(); 
    } 
} 

Y luego en el segundo controlador, hacer setFilter (nueva LevelFilter (Level.INFO)) o lo que sea. Si desea que el archivo sea configurable, puede usar una configuración de propiedades de registro que haya creado usted mismo y utilizar los métodos de Propiedades normales.

Creo que el código de configuración para configurar los dos manejadores de archivos y el código programático es bastante simple una vez que tiene el diseño, pero si desea más detalles, agregue un comentario y lo editaré.

+0

Gracias por la respuesta. Me parece incomprensible que no pueda registrar mensajes de diferente gravedad en diferentes lugares sin escribir código. – user63196

+0

Sí, esa es una de las razones por las que muchas personas usan log4j en su lugar –

0

Creo que debería poder subclasificar un controlador y luego anular los métodos para permitir que la salida vaya a varios archivos según el nivel del mensaje. Esto se haría anulando el método de publicación().

alternativa, si tiene utilizar el FileHandler proporcionado por el sistema, se podría hacer una setFilter() en él para inyectar su propio filtro en la mezcla y, en ese código de filtro, enviar todos los mensajes a su otro archivo y devuelve verdadero si el nivel LogRecord es INFO o superior, lo que hace que FileHandler.publish() lo escriba en el archivo real.

No estoy seguro de que esta sea la forma en que debería utilizar los filtros, pero no veo por qué no funcionará.

+0

Estoy usando la aplicación como está: no quiero escribir código aquí: simplemente configure el registro desde un archivo de propiedades. – user63196

+0

Entonces no se puede hacer. Lo que está solicitando no es una característica del sistema de registro que está utilizando. Si eso es lo que tienes que usar, entonces estás de suerte, me temo. – paxdiablo

Cuestiones relacionadas