How do I make an aspnet request available in my NLog config?

I am trying to add an ip address to the log. I installed the NLog.Extended package and made sure that NLog.Extended.dll is present in my box next to the NLog.dll base. I added the variable "$ {aspnet-request: serverVariable = remote_addr}" to my layout rendering. I am getting a generic error:

An error occurred while creating a config section handler for nlog: Exception occurred while loading config from [my Web.config]

Here is my 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>

      

When I remove the AspNetRequest variable, it doesn't complain. I tried replacing "remote_addr" with "remote_host" with no change. This project uses NLog 2.1.0. Any ideas on what I am doing wrong here?

+3


source to share


3 answers


It turned out that NLog.Extended.dll (3.1.0.0) must match the NLog.dll it was referring to. I updated NLog.dll to 3.1.0.0 and everything works now.



+2


source


If you are using NLog 4.0, you will need NLog.Web to use aspnet = * to render layouts.



+2


source


In my ASP.NET webapi 2.0 solution, I had separate projects for my API and logging. Using nLog 4.4.12 installed via NuGet and all helper packages (Config, Extended, Web, Schema) in the logging project. The "aspnet-request" properties in my configuration will not work until I add nLog references to my api project, even though Copy Local is set to true for the entire nLog DLL in the logging project. My nLog section from my web.config is below.

Hope this helps someone,

<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>

      

0


source







All Articles