util logger log implementar example configurar java logging java.util.logging

implementar - logger java 8



java.util.logging: cómo suprimir la línea de fecha (3)

Estoy tratando de suprimir la salida de la línea de fecha durante el registro cuando uso el registrador predeterminado en java.util.logging. Por ejemplo, aquí hay una salida típica:

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 deshacerme de las líneas del Jun 1, 2010... simplemente saturan mi salida de registro. ¿Cómo puedo hacer esto?


Desde 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 es un usuario de Eclipse y le molesta el mensaje de doble línea en la salida de la consola, podría 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

Algunos formatos de ejemplo están disponibles aquí: http://docs.oracle.com/javase/7/docs/api/index.html?java/util/logging/SimpleFormatter.html .


El problema se debe a un controlador en el registro principal. La solución es eliminar todos los controladores del registro principal y luego agregar su propio controlador personalizado. Este código elimina los manejadores del registro principal:

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


Escriba un formateador personalizado que extienda la clase java.util.logging.Formatter e implemente el método de String format(LogRecord) acuerdo con sus necesidades. Por ejemplo, el siguiente formateador muestra solo el mensaje de registro (y el seguimiento de pila lanzable si se registra 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(); } }

Así es como lo usas:

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