首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net Framework4.8mvc-${}始终为空

.Net Framework4.8mvc-${}始终为空
EN

Stack Overflow用户
提问于 2020-12-24 21:34:14
回答 1查看 1.1K关注 0票数 1

在我的.Net 4.8MVC应用程序中,我试图用NLog编写日志。其中一个字段是traceId -${},该字段假定由NLog.Web支持。

因此,我跟踪了文档并安装了:

  • NLog v4.7.6
  • NLog.Extensions.Logging v1.6.5
  • NLog.Web v4.9.3

我将我的NLog.config放在项目的目录中:

代码语言:javascript
复制
<?xml version="1.0" ?>
<nlog autoReload="true"
      xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      throwExceptions="true"
      internalLogLevel="trace"
      internalLogFile="c:\test\internal-nlog.txt">
  <targets>
    <target name="ws" xsi:type="WebService"  protocol="JsonPost"
            url="https://log-api.com/log/v1">
      <parameter name="time" layout="${date}" />
      <parameter name="level" layout="${level:upperCase=true}"/>
      <parameter name="message" layout="${message}" />
      <parameter name="host" layout="${machinename}" />
      <parameter name="threadid" layout="${threadid}" />
      <parameter name="ActivityId" layout="${activityId}" />
      <parameter name="processId" layout="${processId}" />
      <parameter name="threadid" layout="${threadid}" />
      <parameter name="event-properties" layout="${all-event-properties}" />
      <parameter name="exception" layout="${exception}" />
      <parameter name="traceId" layout="${aspnet-TraceIdentifier}" />
      <parameter name="environment" layout="Production" />
      <parameter name="serviceName" layout="company-api2222222" />
      <parameter name="session" layout="${aspnet-session}"/>
      <parameter name="sessionId" layout="${aspnet-sessionid}"/>
      <header name="X-License-Key" layout="${environment:LICENSE_KEY}"/>
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="ws" />
  </rules>
</nlog>

根据文档,不需要进一步的配置:“只需安装软件包。NLog将自动检测扩展。”

因此,在我的控制器中,我只需要获得当前的类记录器和日志记录:

代码语言:javascript
复制
NLog.LogManager.GetCurrentClassLogger().Info("Hello World");

但是不幸的是,${}值是空的,最糟糕的是我找不到任何关于如何使它工作的文档。

我试图在NLog.config文件中将扩展标记放在目标上方。

代码语言:javascript
复制
<extensions>
    <add assembly="NLog.Web"/>
</extensions>

甚至尝试过这样的方法:

代码语言:javascript
复制
<extensions>
    <add assembly="NLog.Web.AspNetCore"/>
</extensions>

但什么都没变。有人能帮忙吗?我漏掉了什么东西?可能是配置问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-31 16:45:03

目前还不清楚您是在使用ASP.NET还是ASP.NET Core。

因此,这两个问题的答案都是:

ASP.NET (非核心)

对于ASP.NET,您应该使用<add assembly="NLog.Web"/>和NLog.Web包

内部将使用HttpWorkerRequest.RequestTraceIdentifier

ASP.NET芯

对于ASP.NET核心,您应该使用<add assembly="NLog.Web.AspNetCore"/>和NLog.Web.AspNetCore包

NLog将这些用于跟踪标识符:

  • ASP.NET核心3-5:使用System.Diagnostics.Activity.Current.Id (默认)或HttpContext.TraceIdentifier
  • ASP.NET核心1+2:HttpContext.TraceIdentifier
  • 对于ASP.NET核心3-5,您可能需要ignoreActivityId.${aspnet-TraceIdentifier:ignoreActivityId=true} -如果是真的话- HttpContext.TraceIdentifier将被使用而不是System.Diagnostics.Activity.Current.Id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65443406

复制
相关文章

相似问题

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