2009-01-06 6 views
5

Ich habe einen Appender, dass ich nur die ersten X-Zeichen (für dieses Beispiel werden wir 5 sagen) der Nachricht angezeigt werden soll.Trimmen der Log4J-Nachricht

Ich benutze ein PatternLayout, aber ich kann nicht die Nachricht erhalten, um die Nachricht korrekt zu kürzen.

Zum Beispiel, wenn meine Log-Nachricht ist

Der schnelle braune Fuchs

Ich möchte nur sehen:

Die q

Als ich Verwenden Sie dies im Muster

% .5M

ich

n Fuchs

da diejenigen, die letzten 5 Zeichen sind.

Ich habe die PattenLayout Javadoc geschaut, konnte aber nichts finden. Ich weiß, dass es ein bisschen seltsam ist, nicht die ganze Nachricht sehen zu wollen, aber für diesen speziellen Appender macht es Sinn. Ich protokolliere die gesamte Nachricht in einem anderen Appender. Ich möchte es vermeiden, wenn möglich eine benutzerdefinierte Klasse zu schreiben.

Antwort

6

Abschneiden erfolgt standardmäßig vom Anfang einer Nachricht (unterscheidet sich von printf in C, was vom Ende her geschieht).

sollen die richtigen Muster sein:

%.-5m 

EDIT:

ich das gerade versucht, und log4j nicht wie dieses Muster. Das mitgelieferte Muster funktioniert jedoch in LOGBack gut, wenn Sie den Wechsel vornehmen können. Wenn Sie Ihren Protokollanbieter nicht wechseln können, können Sie eine einmalige Änderung an log4j vornehmen. Das interessante Stück Code erscheint auf den Leitungen 75-76 von org.apache.log4j.helpers.PatternConverter:

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

Dies sollte lauten:

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

Sie können einfach die Änderung vornehmen und das Glas neu kompilieren für Ihre Verwendung, oder Sie können PatternConverter ableiten, um die ordnungsgemäße Kürzung durchzuführen. Dies erfordert auch eine neue Version von PatternLayout, die die Methode createPatternParser enthält, die Sie in Ihrer Unterklasse überschreiben müssen, um Ihre neue Version von PatternConverter zu instanziieren.

Als Nebenbemerkung sollten Sie sich die Auswirkungen der Lizenzierung auf die Modifizierung des Open Source-Codes in Ihrem spezifischen Projekt bewusst sein.