Por el momento, una entrada predeterminada se ve así:
Oct 12, 2008 9:45:18 AM myClassInfoHere
INFO: MyLogMessageHere
¿Cómo consigo que haga esto?
Oct 12, 2008 9:45:18 AM myClassInfoHere - INFO: MyLogMessageHere
Aclaración Estoy usando java.util.logging
logging.properties
, con una adaptación basada en la sugerencia de @BrunoEberhard y un nombre de registrador abreviado:java.util.logging.SimpleFormatter.format=%1$tF %1$tT %4$.1s %2$s %5$s%6$s%n
1)
-Djava.util.logging.SimpleFormatter.format
Java 7 admite una propiedad con la
java.util.Formatter
sintaxis de cadena de formato.Ver aquí .
Mi favorito es:
lo que hace que la salida como:
2) Poniéndolo en IDEs
Los IDE generalmente le permiten establecer las propiedades del sistema para un proyecto. Por ejemplo, en NetBeans, en lugar de agregar -D ... = ... en alguna parte, agregue la propiedad en el cuadro de diálogo de acción, en forma de
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-...
- sin comillas. El IDE debería resolverlo.3) Poniéndole eso a Maven - Surefire
Para su comodidad, aquí le mostramos cómo ponerlo en Surefire:
4) hecho a mano
Tengo una biblioteca con pocas
java.util.logging
clases relacionadas . Entre ellos, esSingleLineFormatter
. Tarro descargable aquí .fuente
Similar a Tervor, pero me gusta cambiar la propiedad en tiempo de ejecución.
Tenga en cuenta que esto debe establecerse antes de crear el primer SimpleFormatter, como se escribió en los comentarios.
fuente
Como dijo Obediah Stane, es necesario crear su propio
format
método. Pero cambiaría algunas cosas:Cree una subclase directamente derivada de
Formatter
, no deSimpleFormatter
. losSimpleFormatter
ya no tiene nada que agregar.¡Tenga cuidado al crear un nuevo
Date
objeto! Debe asegurarse de representar la fecha de laLogRecord
. Al crear un nuevoDate
con el constructor predeterminado, representará la fecha y hora en que losFormatter
procesosLogRecord
, no la fecha en queLogRecord
se creó.La siguiente clase se puede usar como formateador en a
Handler
, que a su vez se puede agregar aLogger
. Tenga en cuenta que ignora toda la información de clase y método disponible enLogRecord
.fuente
Esto es lo que estoy usando.
Obtendrás algo como ...
fuente
ofNullable(record.getThrown()).ifPresent(v -> v.printStackTrace());
justo antes de devolver el mensaje formateado.Por captura de pantalla, en Eclipse, seleccione "ejecutar como" y luego "Ejecutar configuraciones ..." y agregue la respuesta de Trevor Robinson con comillas dobles en lugar de comillas. Si pierde las comillas dobles, obtendrá errores de "no se pudo encontrar o cargar la clase principal".
fuente
He descubierto una forma que funciona. Puede subclasificar SimpleFormatter y anular el método de formato
Un poco sorprendido por esta API, hubiera pensado que se hubiera proporcionado más funcionalidad / flexibilidad de fábrica
fuente
formatMessage(record)
lugar derecord.getMessage()
. Los marcadores de posición no cambiarán.Este registro es específico de su aplicación y no es una característica general de Java. ¿Qué aplicaciones estás ejecutando?
Es posible que esto provenga de una biblioteca de registro específica que está utilizando dentro de su propio código. Si es así, publique los detalles de cuál está utilizando.
fuente
java.util.logging.Logger
Si inicia sesión en una aplicación web con Tomcat, agregue:
Sobre argumentos de VM
fuente
si está usando java.util.logging, entonces hay un archivo de configuración que está haciendo esto para registrar el contenido (a menos que esté usando la configuración programática). Por lo tanto, sus opciones son
1) ejecutar el postprocesador que elimina los saltos de línea
2) cambie la configuración del registro Y elimine los saltos de línea. Reinicie su aplicación (servidor) y debería ser bueno.
fuente