【问题标题】:How do I make aspnet-request available in my NLog config?如何在我的 NLog 配置中使 aspnet-request 可用?
【发布时间】:2014-10-22 21:04:10
【问题描述】:

我正在尝试将 IP 地址添加到日志记录中。我安装了 NLog.Extended 包并确保 NLog.Extended.dll 存在于我的 bin 中,位于基本 NLog.dll 旁边。我已将变量“${aspnet-request:serverVariable=remote_addr}”添加到我的布局渲染器中。我收到一个通用错误:

为 nlog 创建配置节处理程序时出错:从 [my Web.config] 加载配置时发生异常

这是我的 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">
 <extensions>
    <add assembly="NLog.Extended" />
  </extensions>
  <targets async="true">
    <target name="fileLog" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" layout="${aspnet-request:serverVariable=remote_addr} ${longdate} ${callsite} ${level} ${message} ${exception:format=ToString}" />
    <target name="dbLog" xsi:type="Database" connectionStringName="db.data" commandText="insert into log ([Date], [Origin], [LogLevel], [Message], [Exception], [StackTrace]) values (@date, @origin, @logLevel, @message, @exception, @stackTrace)">
      <parameter name="@date" layout="${date}"/>
      <parameter name="@origin" layout="${callsite}"/>
      <parameter name="@logLevel" layout="${level}"/>
      <parameter name="@message" layout="${message}"/>
      <parameter name="@exception" layout="${exception:format=Message,StackTrace}"/>
      <parameter name="@stackTrace" layout="${stacktrace}"/>
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="dbLog" />
    <logger name="*" minlevel="Trace" writeTo="fileLog" />
  </rules>
</nlog>

当我删除 AspNetRequest 变量时,它不会抱怨。我试过用“remote_host”替换“remote_addr”,没有任何变化。该项目使用 NLog 2.1.0。关于我在这里做错了什么有什么想法吗?

【问题讨论】:

    标签: nlog


    【解决方案1】:

    如果您使用的是 NLog 4.0,那么您需要 NLog.Web 才能使用 aspnet=* 布局渲染器。

    【讨论】:

      【解决方案2】:

      事实证明,NLog.Extended.dll(3.1.0.0) 必须匹配它所引用的 NLog.dll。我将 NLog.dll 升级到 3.1.0.0,现在一切正常。

      【讨论】:

        【解决方案3】:

        在我的 ASP.NET webapi 2.0 解决方案中,我有一个单独的项目用于我的 API 和日志记录。使用通过 NuGet 安装的 nLog 4.4.12 和日志记录项目中的所有帮助程序包(Config、Extended、Web、Schema)。 在我将 nLog 引用添加到我的 api 项目之前,我的配置中的“aspnet-request”属性将不起作用,即使日志项目中所有 nLog DLL 的“复制本地”设置为 true。我的 web.config 中的 nLog 部分如下。

        希望这对某人有所帮助,

        <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <targets>
        
        
          <target name="db" xsi:type="Database" connectionStringName="NLogConn" commandType="StoredProcedure" commandText="[dbo].[NLog_AddEntry_p]">
            <parameter name="@machineName" layout="${machinename}" />
            <parameter name="@siteName" layout="${iis-site-name}" />
            <parameter name="@logged" layout="${date}" />
            <parameter name="@level" layout="${level}" />
            <parameter name="@username" layout="${aspnet-user-identity}" />
            <parameter name="@message" layout="${message}" />
            <parameter name="@logger" layout="${logger}" />
            <parameter name="@properties" layout="${all-event-properties:separator=|}" />
            <parameter name="@serverName" layout="${aspnet-request:serverVariable=SERVER_NAME}" />
            <parameter name="@port" layout="${aspnet-request:serverVariable=SERVER_PORT}" />
            <parameter name="@url" layout="${aspnet-request:serverVariable=HTTP_URL}" />
            <parameter name="@https" layout="${when:inner=1:when='${aspnet-request:serverVariable=HTTPS}' == 'on'}${when:inner=0:when='${aspnet-request:serverVariable=HTTPS}' != 'on'}" />
            <parameter name="@serverAddress" layout="${aspnet-request:serverVariable=LOCAL_ADDR}" />
            <parameter name="@remoteAddress" layout="${aspnet-request:serverVariable=REMOTE_ADDR}:${aspnet-request:serverVariable=REMOTE_PORT}" />
            <parameter name="@callSite" layout="${callsite:fileName=true:includeSourcePath=false:skipFrames=1}" />
            <parameter name="@exception" layout="${exception:tostring}" />
          </target>
        </targets>
        <rules>
          <logger name="*" minlevel="Trace" writeTo="db" />
        </rules>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-11-06
          • 2021-10-31
          • 2022-07-25
          • 1970-01-01
          • 1970-01-01
          • 2020-07-09
          • 1970-01-01
          相关资源
          最近更新 更多