2010-06-01 10 views
19

Estoy intentando suprimir la salida de la línea de fecha durante el registro al usar el registrador predeterminado en java.util.logging. Por ejemplo, aquí hay una salida típica:java.util.logging: cómo suprimir la línea de fecha

 
Jun 1, 2010 10:18:12 AM gamma.utility.application info 

INFO: ping: db-time=2010-06-01 10:18:12.0, local-time=20100601t101812, duration=180000
Jun 1, 2010 10:21:12 AM gamma.utility.application info
INFO: ping: db-time=2010-06-01 10:21:12.0, local-time=20100601t102112, duration=180000

me gustaría deshacerse de las líneas Jun 1, 2010..., sólo el desorden de mi salida del registro. ¿Cómo puedo hacer esto?

+0

El formato de salida depende del formateador que se esté utilizando. http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/Formatter.html. ¿Puedes especificar qué es lo tuyo y publicar su configuración? – Anton

+0

dar sus archivos .properties? – Bozho

+0

Anton, utilizo java.util.logging.SimpleFormatter en jdk 1.6. Intenté crear un formateador simple y anular su método de formato (LogRecord), pero eso no ayudó. – andrewz

Respuesta

12

El problema es causado por un controlador en el registro principal. La solución es eliminar todos los controladores del registro principal y luego agregar un controlador personalizado. Este código elimina los controladores desde el registro de los padres:

 
     for(Handler iHandler:log.getParent().getHandlers()) 
     { 
     log.getParent().removeHandler(iHandler); 
     } 
+6

en su lugar 'log.setUseParentHandlers (false);' también se puede usar –

5

Escriba un formateador personalizado que amplíe la clase java.util.logging.Formatter e implemente el método String format(LogRecord) según sus necesidades. Por ejemplo, la siguiente formateador muestra sólo el mensaje de registro (y el StackTrace throwable si se está registrando una excepción):

import java.io.PrintWriter; 
import java.io.StringWriter; 
import java.util.logging.Formatter; 
import java.util.logging.LogRecord; 

class CustomRecordFormatter extends Formatter { 
    @Override 
    public String format(final LogRecord r) { 
     StringBuilder sb = new StringBuilder(); 
     sb.append(formatMessage(r)).append(System.getProperty("line.separator")); 
     if (null != r.getThrown()) { 
      sb.append("Throwable occurred: "); //$NON-NLS-1$ 
      Throwable t = r.getThrown(); 
      PrintWriter pw = null; 
      try { 
       StringWriter sw = new StringWriter(); 
       pw = new PrintWriter(sw); 
       t.printStackTrace(pw); 
       sb.append(sw.toString()); 
      } finally { 
       if (pw != null) { 
        try { 
         pw.close(); 
        } catch (Exception e) { 
         // ignore 
        } 
       } 
      } 
     } 
     return sb.toString(); 
    } 
} 

Ésta es la forma en que lo utilice:

import java.util.logging.ConsoleHandler; 
import java.util.logging.Logger; 

class A { 
    private static final Logger LOGGER = Logger.getLogger(A.class.getName()); 

    static { 
     CustomRecordFormatter formatter = new CustomRecordFormatter(); 
     ConsoleHandler consoleHandler = new ConsoleHandler(); 
     consoleHandler.setFormatter(formatter); 
     LOGGER.addHandler(consoleHandler); 
    } 

    public void doSomething() { 
     LOGGER.info("something happened"); 
    } 
} 
+0

Lo intentaré, pero cuando intenté algo similar la última vez no lo hice no funciona – andrewz

+0

Es necesario seguir la respuesta de andrew a continuación, además de esto :) –

+0

Formatter es final. –

31

De Java SE 7 hay una nueva propiedad del sistema: java.util.logging.SimpleFormatter.format.

La misma propiedad también se puede configurar en el archivo de propiedades java.util.logging (logging.properties). Si usted es un usuario de Eclipse, y que está molesto por el mensaje de doble línea en la salida de la consola, puede cambiar el archivo jre logging.properties (JDK_HOME/jre/lib/logging.properties) de esta manera:

java.util.logging.SimpleFormatter.format =% 4 $ s:% 5 $ s [% 1 $ tc]% n

algún formato de ejemplo está disponible aquí: http://docs.oracle.com/javase/7/docs/api/index.html?java/util/logging/SimpleFormatter.html.

+1

¿Existe alguna solución para Java 6? –

+1

Acabas de salvar nuestro día, gracias amigo. Para el registro, si está usando Tomcat, también puede cambiar esto en /etc/tomcat/logging.properties, no necesita cambiar la configuración global de Java. – bviktor

+0

Si desea hacer esto programáticamente, consulte la respuesta aquí: https://stackoverflow.com/questions/194765/how-do-i-get-java-logging-output-to-appear-on-a-single-line –

Cuestiones relacionadas