2017-11-15 7 views
0

Ist es möglich, log4j2 so zu konfigurieren, dass die Stacktraces nicht die Quelle und vielleicht nicht die Zeilennummern anzeigen?
Falls Sie sich wundern, warum ich das möchte, brauche ich das für Komponententests, die testen müssen, ob Ausnahmen korrekt protokolliert werden. Wenn also zum Beispiel die JRE-Version nicht die gleiche ist wie die, in die ich den ursprünglichen Stacktrace kopiert habe, schlagen die Tests fehl. Wenn also die Quelle nicht im Stacktrace enthalten wäre, wäre sie viel unabhängiger.log4j2 Stack-Format ändern

Beispiel:

Zeit eine Linie von der Stacktrace sieht wie folgt aus:

at java.lang.Object.wait(Object.java:502) ~[?:1.8.0_144] 

Ich mag es so aussehen (aber nur für log4j2):

at java.lang.Object.wait(Object.java:502) 

Vielleicht auch so:

at java.lang.Object.wait(Object.java) 

Oder noch kürzer:

at java.lang.Object.wait 

(Jede der gekürzten Versionen wäre akzeptabel. Da derzeit nur die Quelle (~[?:1.8.0_144] vs ~[?:1.8.0_151] zum Beispiel) unterscheidet)

Update:.

Ich fand gerade diese in der offiziellen Dokumentation: https://logging.apache.org/log4j/2.x/manual/layouts.html#Patterns denke ich %ex{full} verwenden, sollten das sein, was ich will. Wird es testen.

Es gibt auch einige andere verfügbare Formate.

+0

Ich bin nicht sicher, was Ihre genauen Anforderungen sind, aber ich würde das denken, solange Sie den Namen und die Nachricht der Ausnahmeklasse zusammen mit dem grundlegenden Format der Stack-Trace-Elemente testen, die ausreichen sollten. Ich bin mir nicht sicher, warum Sie den gesamten Stack-Trace vergleichen möchten, wenn Sie nur darauf achten, dass die Exception mit ihrem Trace protokolliert wurde. –

Antwort

0

Ich glaube nicht, dass es möglich ist. Der Stacktrace kommt von der JVM, log4j druckt einfach, was auch immer gegeben wird.

+0

Ich meine es muss irgendwie möglich sein. Die Stacktraces in den Unit-Testberichten enthalten niemals den '~ [?: 1.8.0_144]' -Teil. – BrainStone

+0

Der Stack-Trace im Unit-Testbericht wird nicht über log4j gesendet – pecks