日誌輸出現要改為json格式,網上查詢layout配置為JsonLayout就可以了,結果發現輸出中文為unicode編碼,看很多文章說配置encode="false"就可以了,結果配置後是顯示中文,但沒有了雙引號,和內容中包括雙引號的話直接輸出,不是json格式了。後面仔細查看了官方文檔,發現原來 ...
日誌輸出現要改為json格式,網上查詢layout配置為JsonLayout就可以了,結果發現輸出中文為unicode編碼,看很多文章說配置encode="false"就可以了,結果配置後是顯示中文,但沒有了雙引號,和內容中包括雙引號的話直接輸出,不是json格式了。後面仔細查看了官方文檔,發現原來有些文章略有不對,中文輸出是解決了,但都不是json格式了。
官方參數解釋如下:
- encode - Enable or disable JSON encoding for the attribute. Enabled by default.(翻譯為“該屬性啟用或禁用JSON編碼。 預設情況下啟用。”)
所以把此項設為false的話就不是json格式了,看文檔還有其他參數,有一項escapeUnicode參數貌似是對的
- escapeUnicode - Escape unicode-characters (non-ascii) using \u. Enabled by default.(翻譯為“使用\ u轉義unicode-characters(非ascii)。 預設情況下啟用。”)
設置此項為false後中文顯示正常,編碼也正常了。
完整的設置如下:
<layout xsi:type="JsonLayout"> <attribute name="Level" layout="${level:upperCase=true}"/> <attribute name="Time" layout="${longdate}" /> <attribute name="Tag" layout="${callsite:className=true:methodName=true:skipFrames=1}" /> <attribute name="Msg" layout="${message}" escapeUnicode="false" /> </layout>
測試輸出格式:
{ "Level": "INFO", "Time": "2019-03-25 15:18:38.0199", "Tag": "SysWebTest.Controllers.HomeController.Index", "Msg": "測試日誌\"1111\"格式" }