NLog配置JsonLayout中文输出为unicode问题
程序员文章站
2022-04-08 19:23:24
日志输出现要改为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\"格式" }
上一篇: 二哈你装什么熊