我正在尝试将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。关于我在这里做错了什么的想法?
答案 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”属性不起作用,即使对于日志项目中的所有nLog 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>