2011-05-17 15 views
8

Estoy usando java logging para escribir mensajes de registro de mi aplicación en un archivo de registro y otros destinos. Después de haber establecido el nivel de registro a FINE, también recibo mensajes no deseados (AWT) de/Swing, tales como:Deshabilitar awt/swing debug (fine) mensajes de registro

{0}, when grabbed {1}, contains {2} 

y otros. Mirando el código fuente JDK (ver por ejemplo here), uno ve que el nombre del registrador correspondiente es sun.awt.X11.grab.XWindowPeer.

Lo que entendí del marco de trabajo de registro de Java es que este manejador de registro debe heredar su nivel de registro de sus padres como sun.awt.

He intentado lo siguiente:

Logger.getLogger("sun.awt").setLevel(Level.OFF); 

pero los mensajes de depuración AWT/Swing siguen apareciendo en la salida del registro.

¿Cuál es la forma recomendada de programáticamente inhabilitar estos mensajes de registro (mientras todavía permite FINE mensajes de otras fuentes)?

+0

Por favor, actualice su pregunta para mostrar cómo se está obteniendo la instancia registrador y la forma en la que está llamando él. –

Respuesta

0

Pruebe Logger.getRootLogger(). SetLevel (Level.OFF);

1

Tuve el mismo problema hoy. Buscando en google esta es la url superior y no encuentro una buena fuente para una respuesta, así que publicaré la mía :)

Suponiendo que Andre use la API java.util.logging, es posible agregar un Handler que controlará la formato de su registro, usando setFormatter(Formatter newFormatter).

Extendí Formatter y comprobé si la clase del registro contiene java.awt, javax.swing o sun.awt.

class MyFormatLog extends Formatter { 

    @Override 
    public String format(LogRecord record) { 
     if(!record.getSourceClassName().contains("java.awt") && 
     !record.getSourceClassName().contains("javax.swing.") && 
     !record.getSourceClassName().contains("sun.awt.")) { 
      //format my output... 
     } else { 
      return ""; 
     } 
    } 

} 
5

Si lo que desea es registrar los mensajes de su propia aplicación, puede desactivar todos los mensajes y luego activar de forma explícita mensajes para su aplicación:

Logger.getRootLogger().setLevel(Level.OFF); 
Logger.getLogger("package.of.your.application").setLevel(Level.ALL); 

Dentro de las propiedades de archivo para el registro (por ejemplo logging.properties) esto sería:

.level = OFF 
package.of.your.application.level = ALL 
+0

perfecto, gracias – Aralox

1

no pude encontrar el método getRootLogger() en la clase Logger cualquier m mineral. Esto es lo que funciona para mí:

logger = Logger.getLogger("my.package"); 
Logger l = logger; 
while (l != null) { 
    l.setLevel(Level.OFF); 
    l = l.getParent(); 
}    
logger.setLevel(Level.FINER); 
1
Logger.getLogger("java.awt").setLevel(Level.OFF); 
    Logger.getLogger("sun.awt").setLevel(Level.OFF); 
    Logger.getLogger("javax.swing").setLevel(Level.OFF); 
Cuestiones relacionadas