2009-01-06 15 views
5

Mam appender, że chcę tylko pierwsze znaki X (w tym przykładzie powiemy 5) wiadomości do wyświetlenia.Przycinanie wiadomości Log4J

Używam PatternLayout, ale nie mogę uzyskać komunikatu o prawidłowym obcięciu komunikatu.

Na przykład, jeśli moja wiadomość dziennika jest

Szybki brązowy lis

Chcę po prostu zobaczyć:

Q

Kiedy użyj tego we wzorze

% .5m

uzyskać

n fox

ponieważ to są ostatnie 5 znaków.

Spojrzałem na javadoc PattenLayout, ale nie mogłem niczego znaleźć. Wiem, że to trochę dziwne, że nie chcę widzieć całej wiadomości, ale dla tego konkretnego aplikanta ma to sens. Loguję całą wiadomość w innym aplikatorze. Chciałbym uniknąć pisania klasy niestandardowej, jeśli to możliwe.

Odpowiedz

6

Skracanie odbywa się od początku wiadomości domyślnie (różni się od printf w C, który robi to od końca).

Prawidłowe wzorca powinny być:

%.-5m 

EDIT:

Właśnie próbowałem, i log4j nie lubi tego wzoru. Jednak dostarczony wzorzec będzie działał poprawnie w LOGBack, jeśli można go przełączyć. Jeśli nie możesz zmienić swojego dostawcy rejestrowania, możesz wprowadzić jednorazową modyfikację log4j.

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

ten powinien brzmieć::

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

Można po prostu zrobić modyfikacji i rekompilacji słoik Interesujący fragment kodu na liniach 75-76 z org.apache.log4j.helpers.PatternConverter pojawia do użytku lub możesz podklasę PatternConverter wykonać odpowiednie obcięcie. Będzie to również wymagało nowej wersji PatternLayout, która zawiera metodę createPatternParser, którą będziesz musiał przesłonić w swojej podklasie, aby utworzyć instancję nowej wersji PatternConverter.

Uwaga: należy pamiętać o konsekwencjach licencyjnych dotyczących modyfikowania kodu open source w konkretnym projekcie.