首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NLog使用Json布局添加backSlash

NLog使用Json布局添加backSlash
EN

Stack Overflow用户
提问于 2020-08-13 14:15:14
回答 2查看 302关注 0票数 1

我找不到一种方法来告诉NLog在不使用反斜杠的情况下正确地打印我的JSON。

这是我的Nlog.config:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwConfigExceptions="true">
  <targets async="true">
    <target name="jsonFile" xsi:type="File" fileName="//share/Logs/Ws/${shortdate}.json" >
      <layout xsi:type="JsonLayout">
        <attribute name="Timestamp" layout="${longdate}"/>
        <attribute name="Level" layout="${level:upperCase=true}"/>
        <attribute name="SourceContext" layout="${logger}"/>
        <attribute name="MachineName" layout="${machinename}"/>
        <attribute name="ProcessId" layout="${processid}"/>
        <attribute name="ThreadId" layout="${threadid}"/>
        <attribute name="Assembly" layout="${Assembly-Name}"/>
        <attribute name="AssemblyVersion" layout="${Assembly-Version}"/>
        <attribute name="Message" layout="${message}"/>
        <attribute name="Exception" layout="${exception:format=@}" encode="false"/>
        <attribute name="Properties" encode="false">
          <layout type='JsonLayout' includeAllProperties="true"  maxRecursionLimit="10">
            <attribute name="ActivityId" layout="${activityid}"/>
            <attribute name="Method" layout="${aspnet-request-method}"/>
            <attribute name="ClientIp" layout="${aspnet-request-ip}"/>
            <attribute name="Url" layout="${aspnet-request-url}"/>
            <attribute name="Querystring" layout="${aspnet-request-querystring:when=level==LogLevel.Trace or level==LogLevel.Error or level==LogLevel.Fatal}"/>
            <attribute name="Headers" layout="${aspnet-request-headers:when=level==LogLevel.Trace or level==LogLevel.Warn or level==LogLevel.Error or level==LogLevel.Fatal}"/>
            <attribute name="Payload" escapeForwardSlash="false" layout="${aspnet-request-posted-body:when=level==LogLevel.Trace or level==LogLevel.Error or level==LogLevel.Fatal}"/>
          </layout>
        </attribute>
      </layout>
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="jsonFile" />
  </rules>
</nlog>

然而,当它打印到文件时,我会得到以下示例:

代码语言:javascript
复制
"Payload": "{\"name\":\"value\",\"surname\":\"value\"}"

你知道怎么修复它吗?

EN

回答 2

Stack Overflow用户

发布于 2020-08-13 16:54:03

它逃脱了有效负载,因为它不知道它已经是JSON。

您可以使用encode="false"禁用此功能,如下所示:

代码语言:javascript
复制
 <attribute name="Payload" encode="false" escapeForwardSlash="false" layout="${aspnet-request-posted-body:when=level==LogLevel.Trace or level==LogLevel.Error or level==LogLevel.Fatal}"/>

See docs

票数 0
EN

Stack Overflow用户

发布于 2020-08-14 03:08:29

随机的想法,如果你能确保HttpRequest ContentType是application/json

代码语言:javascript
复制
<layout xsi:type="JsonLayout">
   <attribute name="Properties" encode="false">
        <layout type='JsonLayout' includeAllProperties="true"  maxRecursionLimit="10">
           <attribute name="Payload" encode="false" layout="${when:when='${aspnet-request-contenttype}'=='application/json':inner=${aspnet-request-posted-body}}" />
           <attribute name="Payload" layout="${when:when='${aspnet-request-contenttype}'!='application/json':inner=${aspnet-request-posted-body}}" />
        </layout>
   </attribute>
</layout>

另请参阅:https://github.com/NLog/NLog/wiki/AspNet-Request-ContentType-layout-renderer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63389172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档