在查阅了JsNLog docs和我在SO上找到的2篇文章(this和that)之后,关于记录来自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的注释之后)。 有谁有更好的一个?