为什么 NLog ${aspnet-request-host} 是空的?

Why NLog ${aspnet-request-host} is empty?

我是 运行 我桌面上的 WCF 服务。我在 NLog.config 文件中使用 ${aspnet-request-host}。执行 Web 服务后,我得到了响应,但它没有记录 host 信息。我正在使用 .NET Framework 4。

我已经添加了

<extensions>
     <add assembly="NLog.Web"/>
</extensions> 

这篇文章到 NLog.config 文件。

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Error" internalLogFile="C:/Users/sranade/nlog-internal.log">

  <extensions>
    <add assembly="NLog.Web"/>
  </extensions>
  <!-- optional, add some variables
  https://github.com/nlog/NLog/wiki/Configuration-file#variables
  -->

  <!--
  See https://github.com/nlog/nlog/wiki/Configuration-file
  for information on customizing logging rules and outputs.
   -->
  <targets>

    <!--
    add your targets here
    See https://github.com/nlog/NLog/wiki/Targets for possible targets.
    See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
    -->

    <!-- database target -->
    <target name="database"
            xsi:type="Database"
            connectionStringName="NLog"
            commandText="exec dbo.InsertLog
                            @level,
                            @request,
                            @response,
                            @requesttype,
                            @retailerid,
                            @storenumber,
                            @retailerreferenceid,
                            @sourceip,
                            @transactiondate,
                            @transactiondatetime,
                            @processingtime,
                            @servername,
                            @callSite,
                            @type,
                            @message,
                            @stackTrace,
                            @innerException,
                            @additionalInfo">
      <parameter name="@level" layout="${level}" />
      <parameter name="@request" layout="${event-properties:item=request}" />
      <parameter name="@response" layout="${event-properties:item=response}" />
      <parameter name="@requesttype" layout="${event-properties:item=requesttype}" />
      <parameter name="@retailerid" layout="${event-properties:item=retailerid}" />
      <parameter name="@storenumber" layout="${event-properties:item=storenumber}" />
      <parameter name="@retailerreferenceid" layout="${event-properties:item=retailerreferenceid}" />
      <parameter name="@sourceip" layout="${event-properties:item=sourceip}" />
      <parameter name="@transactiondate" layout="${event-properties:item=transactiondate}" />
      <parameter name="@transactiondatetime" layout="${event-properties:item=transactiondatetime}" />
      <parameter name="@processingtime" layout="${event-properties:item=processingtime}" />
      <parameter name="@servername" layout="${event-properties:item=servername}" />
      <parameter name="@callSite" layout="${callsite}" />
      <parameter name="@type" layout="${exception:format=type}" />
      <parameter name="@message" layout="${exception:format=message}" />
      <parameter name="@stackTrace" layout="${exception:format=stackTrace}" />
      <parameter name="@innerException"
                 layout="${exception:format=:innerFormat=ShortType,Message,Method:MaxInnerExceptionLevel=1:InnerExceptionSeparator=}" />
      <parameter name="@additionalInfo" layout="${message}" />
    </target>
  </targets>

  <rules>
    <!-- add your logging rules here -->
    <logger levels="Error,Warn,Fatal,Debug,Info" name="databaseLogger" writeTo="database"/>
    <!--
    Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"
    <logger name="*" minlevel="Debug" writeTo="f" />
    -->
  </rules>
</nlog>

不确定您是否能够获得该值,因为 WCF 不会 运行 到 ASP.Net。

您可以尝试将其启用 aspNetCompatibilityEnabled,但它仍然可能无法提供值并可能导致问题。