在我的.Net 4.8MVC应用程序中,我试图用NLog编写日志。其中一个字段是traceId -${},该字段假定由NLog.Web支持。
因此,我跟踪了文档并安装了:
我将我的NLog.config放在项目的目录中:
<?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将自动检测扩展。”
因此,在我的控制器中,我只需要获得当前的类记录器和日志记录:
NLog.LogManager.GetCurrentClassLogger().Info("Hello World");但是不幸的是,${}值是空的,最糟糕的是我找不到任何关于如何使它工作的文档。
我试图在NLog.config文件中将扩展标记放在目标上方。
<extensions>
<add assembly="NLog.Web"/>
</extensions>甚至尝试过这样的方法:
<extensions>
<add assembly="NLog.Web.AspNetCore"/>
</extensions>但什么都没变。有人能帮忙吗?我漏掉了什么东西?可能是配置问题吗?
发布于 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将这些用于跟踪标识符:
System.Diagnostics.Activity.Current.Id (默认)或HttpContext.TraceIdentifierHttpContext.TraceIdentifier${aspnet-TraceIdentifier:ignoreActivityId=true} -如果是真的话- HttpContext.TraceIdentifier将被使用而不是System.Diagnostics.Activity.Current.Idhttps://stackoverflow.com/questions/65443406
复制相似问题