2016-07-30 43 views
3

私はJavaスタックトレースから改行を削除しようとしています。私はlogbackパターンを以下ましログバックのJavaスタックトレースから改行を削除するにはどうすればよいですか?

-

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'\n', ''}%n</pattern> 

私はそれがメッセージで改行を置き換えるために期待するが、それはそうされていません。スタックトレースは改行で印刷されています。

私は次のパターン(テスト目的でのみ)を使用する場合は、 -

<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'.*', 'x'}%n</pattern> 

を私はメッセージが文字xに置き換えなっているが、あるとしてスタックトレースがまだ印刷されたばかりされていることがわかります。

これは、ログバックがスタックトレースを別々に扱うと信じています。 (%ex)を介してstacktraesを参照できるというログバック文書を読みました。

しかし、アペンダーのために一度に1つのパターンしかアクティブにすることはできません。 スタックトレースで改行が得られないようにするにはどうすればよいですか?

答えて

6

フォーマッタは私のWindowsマシン上の文字列を構築する方法Logbackを見た後、私はWindowsを使用しているので、もしスタックトレースは、それぞれの新しいラインの\r\nが含まれていることを見て、代わりにこれを試してみてください。

<pattern>........ %replace(%ex){'[\r\n]+', '\\n'}%nopex%n</pattern> 

説明:

  • \r\n:最初、私は唯一の%replace(%ex){'\n', 'X'}てみましたが、その後、私は、ログに持っていた時に、新しい行の文字「X」。代わりに、%replace(%ex){'[\r\n]+', ''}を使用すると、\r\nがすべて削除されます。文字列"\n"を表示して、新しい行がここにあったことを示す場合は、'\\n'%replaceの第2パラメータに追加できます。

  • %nopex:私は理由を知りませんが、%ex%replaceを使用する場合、Logbackは、すべての新しい行で、あなたのエントリに、この時間を秒スタックトレースを追加します。 %nopexdocumentationを参照)を使用すると、%replaceなしで実際のスタックを使用してこの2番目のスタックを抑制します。

+0

nopexがトリックを行った – user375868

関連する問題