在Asp.Net Core下使用NLog配置JsNLog与RequestId日志记录

时间:2018-12-02 10:32:46

标签: asp.net-core nlog jsnlog

在查阅了JsNLog docs和我在SO上找到的2篇文章(thisthat)之后,关于记录来自Java的JsNLog的RequestId的最佳解决方案仍然存在问号日志条目。到目前为止,我想到了这个:

(1) _Layout.cshtml 中,使用JsNLog taghelper,但直接在其中放置HttpContext.TraceIdentifier,而不是使用JSNLog.JavascriptLogging.RequestId(ViewContext.HttpContext )在幕后做同样的事情:

<jl-javascript-logger-definitions request-id="@ViewContext.HttpContext.TraceIdentifier" />

(2)配置NLog以使用 WhenEmpty布局渲染器。对于未设置标题“ JSNLog-RequestId”(由JsNLog javascript提交)的所有事件,它将记录HttpContext.TraceIdentifier:

<target xsi:type="File" name="allfile" fileName="log-all-${shortdate}.log"
        layout="${aspnet-request:header=JSNLog-RequestId:whenEmpty=${aspnet-TraceIdentifier}} ${longdate}| ... other entries ... />

确保NLog.config包含

<extensions>
  <!-- Make these renderers available: https://nlog-project.org/config/?tab=layout-renderers&search=package:nlog.web.aspnetcore -->
  <add assembly="NLog.Web.AspNetCore"/>
</extensions>

通过这种方式,我们为属于服务器和客户端的日志条目找到了相同的RequestId(又名TraceIdentifier)。

此解决方案有效,感觉还不错(在实现@Rolf Kristensen的注释之后)。 有谁有更好的一个?

0 个答案:

没有答案