${mdlc:item=RequestId} 和 ${aspnet-request-posted-body} 不返回数据

${mdlc:item=RequestId} and ${aspnet-request-posted-body} not returning data

我在 nlog.config 文件中使用 ${aspnet-request-posted-body},我还在启动文件中添加了配置。但是 ${aspnet-request-posted-body} 没有记录请求正文并且 ${mdlc:item=RequestId} 也没有工作

    <target xsi:type="File" name="allfile" fileName="c:\Logs\Api_.log"
                layout="==>[${event-properties:item=traceLevel}: User=${aspnet-user-identity}; ]
                                ${when:when=('${event-properties:item=traceLevel}' == 'Verbose' and 
            '${aspnet-request-method}' != 'GET')   > 0 and length('${mdlc:item=RequestId}') > 0:inner=${newline}Request-Body\: ${aspnet-request-posted-body}}
                                ${newline}Logger name: ${logger} 
                                ${newline}" />
  1. ${aspnet-request-posted-body}${mdlc:item=RequestId} 在 nlog 文件中使用
  2. 为了在启动时启用 ${aspnet-request-posted-body},我使用了这段代码。
              app.Use(async (context, next) =>                     
              {
                            context.Request.EnableBuffering();
                            await next?.Invoke();
              }); 

可能会从像这样简单的事情开始:

<target xsi:type="File" name="allfile" fileName="c:\Logs\Api_.log"
            layout="RequestId=${mdlc:item=RequestId} RequestBody=${aspnet-request-posted-body}" />

然后在调试级别启用 NLog InternalLogger 并寻找线索:

除了调用 EnableBuffering() 之外,您还需要使用方法 UseNLog() 将 NLog 正确注册为 LoggingProvider。另见 https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-3

如果您不使用 Microsoft ILogger 在活动 HttpRequest 的上下文中进行日志记录,则 RequestId 将不可用。