如何在我的NLog配置中提供aspnet-request?

时间:2014-10-22 21:04:11

标签: nlog

我正在尝试将ip地址添加到日志记录中。我安装了NLog.Extended包并确保NLog.Extended.dll存在于基本NLog.dll旁边的bin中。我添加了变量" $ {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变量时,它并没有抱怨。我试过更换&#34; remote_addr&#34;用&#34; remote_host&#34;没有变化。该项目使用的是NLog 2.1.0。关于我在这里做错了什么的想法?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

原来,NLog.Extended.dll(3.1.0.0)必须与它引用的NLog.dll相匹配。我将NLog.dll升级到3.1.0.0,现在一切正常。

答案 2 :(得分:1)

在我的ASP.NET webapi 2.0解决方案中,我有一个单独的项目用于我的API和日志记录。使用通过NuGet安装的nLog 4.4.12和日志记录项目中的所有帮助程序包(Config,Extended,Web,Schema)。 在我将apLog引用添加到我的api项目之前,我的配置中的“aspnet-request”属性不起作用,即使对于日志项目中的所有nL​​og DLL,“Copy Local”设置为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>