2016-07-30 52 views
3

我想從Java stacktraces中刪除換行符。如何在logback中從Java堆棧跟蹤中刪除換行符?

我的logback如下模式 -

<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但棧跟蹤替換仍然得到打印爲是。

這讓我相信logback獨立處理堆棧跟蹤。 我已經通過logback文檔說它可以通過(%ex)引用stacktraes。

但是,我可以一次只有一個模式爲appender激活。 我該如何着手確保我不會在stacktraces中獲得換行符?

回答

6

看的logback格式化如何建立在我的Windows中的字符串後,我看到堆棧跟蹤包含\r\n爲每個新線,因此,如果您使用的是Windows,試試這個來代替:

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

說明:

  • \r\n:首先我想只有%replace(%ex){'\n', 'X'}但後來我在日誌中的新行字符,然後一個「X」。相反,使用%replace(%ex){'[\r\n]+', ''}刪除所有出現的\r\n。如果要顯示字符串"\n"以指示新行在此處,則可以在%replace第二個參數中添加'\\n'

  • %nopex:我不知道爲什麼,但如果你對%ex使用%replace,增加的logback第二堆棧跟蹤您的項目,此時所有的新生產線。使用%nopex(請參閱documentation),它會通過僞造使用實際堆棧而不使用任何%replace來抑制第二個堆棧。

+0

nopex做了這個把戲 – user375868