2009-01-06 11 views
5

Tengo un appender que solo quiero los primeros X caracteres (para este ejemplo, diremos 5) del mensaje que se mostrará.Recortar el mensaje Log4J

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

Por ejemplo, si mi mensaje de registro es

El rápido zorro marrón

sólo quiero ver:

El q

Cuando use esto en el Patrón

% .5m

me sale

n zorro

ya que esos son los últimos 5 caracteres.

Miré 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. Logro el mensaje completo en un appender diferente. Me gustaría evitar escribir una clase personalizada si es posible.

Respuesta

6

El truncamiento se realiza desde el comienzo de un mensaje por defecto (difiere del printf en C, que lo hace desde el final).

El patrón correcto debería ser:

%.-5m 

EDIT:

Acabo de intentar esto, y log4j no le gusta ese patrón. Sin embargo, el patrón suministrado funcionará correctamente en LOGBack, si puede realizar el cambio. Si no puede cambiar su proveedor de registro, puede hacer una modificación única en log4j. La parte interesante 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)); 

puede simplemente hacer la modificación y volver a compilar el frasco para su uso, o puede crear una subclase PatternConverter para realizar el truncamiento correcto. Esto también requerirá una nueva versión de PatternLayout, que contiene el método createPatternParser, que deberá sobrescribir en su subclase para crear una instancia de su nueva versión de PatternConverter.

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