Domanda

Ho un appender che voglio solo visualizzare i primi X caratteri (per questo esempio, diremo 5) del messaggio.

Sto usando un PatternLayout ma non riesco a ottenere il messaggio per troncare il messaggio correttamente.

Ad esempio, se il mio messaggio di registro è

  

La rapida volpe marrone

Voglio solo vedere:

  

La q

Quando lo uso nel Pattern

  

%. 5m

Ottengo

  

n fox

poiché questi sono gli ultimi 5 caratteri.

Ho cercato il PattenLayout javadoc, ma non sono riuscito a trovare nulla. So che è un po 'strano non voler vedere l'intero messaggio, ma per questo appender specifico ha senso. Registro l'intero messaggio in un appender diverso. Vorrei evitare di scrivere una lezione personalizzata, se possibile.

È stato utile?

Soluzione

Il troncamento viene eseguito dall'inizio di un messaggio per impostazione predefinita (differisce da printf in C, che lo fa dalla fine).

Il modello corretto dovrebbe essere:

%.-5m

EDIT:

Ho appena provato questo, e log4j non piace quel modello. Tuttavia, il modello fornito funzionerà perfettamente in LOGBack, se è possibile effettuare il passaggio. Se non è possibile cambiare il proprio provider di registrazione, è possibile apportare una modifica una tantum a log4j. L'interessante bit di codice appare nelle righe 75-76 di org.apache.log4j.helpers.PatternConverter:

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

Questo dovrebbe leggere:

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

Puoi semplicemente apportare la modifica e ricompilare il barattolo per il tuo uso, oppure puoi sottoclassare PatternConverter per eseguire il troncamento corretto. Ciò richiederà anche una nuova versione di PatternLayout, che contiene il metodo createPatternParser, che sarà necessario sostituire nella sottoclasse per creare un'istanza della nuova versione di PatternConverter.

Come nota a margine, sii consapevole delle implicazioni relative alle licenze di modifica del codice open source nel tuo progetto specifico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top