Pregunta

Tengo un apéndice que solo quiero que aparezcan los primeros X caracteres (para este ejemplo, diremos 5) del mensaje.

Estoy usando un PatternLayout pero no puedo obtener el mensaje para truncar el mensaje correctamente.

Por ejemplo, si mi mensaje de registro es

  

El zorro marrón rápido

Solo quiero ver:

  

La q

Cuando uso esto en el Patrón

  

% .5m

me sale

  

n fox

ya que esos son los últimos 5 caracteres.

He buscado el PattenLayout javadoc, pero no pude encontrar nada. Sé que es un poco extraño no querer ver el mensaje completo, pero para este apéndice específico tiene sentido. Registro el mensaje completo en un apéndice diferente. Me gustaría evitar escribir una clase personalizada si es posible.

¿Fue útil?

Solución

El truncamiento se realiza desde el principio de un mensaje de forma predeterminada (difiere de printf en C, que lo hace desde el final).

El patrón apropiado debería ser:

%.-5m

EDITAR:

Acabo de probar esto, y a log4j no le gusta ese patrón. Sin embargo, el patrón suministrado funcionará bien en LOGBack, si puede hacer el cambio. Si no puede cambiar su proveedor de registro, puede realizar una modificación única a log4j. El interesante fragmento de código aparece en las líneas 75-76 de org.apache.log4j.helpers.PatternConverter:

if(len > max)
  sbuf.append(s.substring(len-max));

Esto debería leer:

if(len > max)
  sbuf.append(s.substring(0,max));

Simplemente puede hacer la modificación y recompilar el jar para su uso, o puede subclasificar PatternConverter para realizar el truncamiento adecuado. Esto también requerirá una nueva versión de PatternLayout, que contiene el método createPatternParser, que deberá anular en su subclase para crear una instancia de su nueva versión de PatternConverter.

Como nota al margen, tenga en cuenta las ramificaciones de licencia de modificar el código fuente abierto en su proyecto específico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top