После просмотра документов JsNLog и двух сообщений, которые я нашел на SO ( это и то ), все еще оставались вопросительные знаки о наилучшем решении для ведения журнала.RequestId от JsNLog для записей журнала Javascript.До сих пор я придумал это:
(1) В _Layout.cshtml используйте тег-помощник JsNLog, но поместите туда напрямую HttpContext.TraceIdentifier, а не используйтеJSNLog.JavascriptLogging.RequestId (ViewContext.HttpContext), который делает то же самое под капотом:
<jl-javascript-logger-definitions request-id="@ViewContext.HttpContext.TraceIdentifier" />
(2) Настройка NLog для использования WhenEmpty Layer Renderer .Он будет регистрировать HttpContext.TraceIdentifier для всех событий, для которых не установлен заголовок «JSNLog-RequestId» (представленный JsNLog javascript):
<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 были реализованы),У кого-нибудь есть лучше?