NLog is able to read aspnet-request variables in one of the server and its working fine. Alternatively the same NLog configuration is not working in another server. It is throwing below exception.
error application="Portal" host="test-machine" type="System.ArgumentException" message="LayoutRenderer cannot be found: 'aspnet-request'. Is NLog.Web not included?" source="NLog"
Compared .NET Framework versions, NLog.Web.dll
and NLog.dll
of both servers. All are same in both servers.
Here is my NLog configuration in Web.config `
<variable name="appName" value="Logs" />
<targets async="true">
<target type="File" name="file" layout="${longdate} - ${level:uppercase=true}: ${message}${onexception:${newline}EXCEPTION\: ${exception:format=ToString}}" fileName="${basedir}\${appName}\Debug.log" keepFileOpen="false" archiveFileName="${basedir}\${appName}\Debug_${shortdate}.{##}.log" archiveNumbering="Sequence" archiveEvery="Day" maxArchiveFiles="30" />
<!-- target type="EventLog" name="eventlog" source="${appName}" layout="${message}${newline}${exception:format=ToString}" / -->
<target type="Database" name="database" connectionStringName="DefaultConnection" commandText="insert into portal_log(LogDate, Level, Message, MachineName, Url, RemoteAddress, UserName, UserAgent, Exception) values(@logDate, @level, @message, @machinename, @url, @remoteAddress, @username, @userAgent, @log_exception);">
<parameter name="@logDate" layout="${date}" />
<parameter name="@level" layout="${level}" />
<parameter name="@message" layout="${message}" />
<parameter name="@username" layout="${event-properties:item=UserName}" />
<parameter name="@machinename" layout="${machinename}" />
<parameter name="@url" layout="${event-properties:item=Url}" />
<parameter name="@remoteAddress" layout="${aspnet-request:serverVariable=REMOTE_ADDR}:${aspnet-request:serverVariable=REMOTE_PORT}" />
<parameter name="@userAgent" layout="${aspnet-request-useragent}" />
<parameter name="@log_exception" layout="${exception}" />
</target>
</targets>
<rules>
<!-- add your logging rules here -->
<logger name="*" writeTo="file" minlevel="Info" />
<!-- logger name="*" writeTo="eventlog" minlevel="Error" / -->
<logger name="*" writeTo="database" minlevel="Trace" />
</rules>
`
When I hard code values of remoteAddress
& userAgent
its working fine in the second server. If we are accessing through aspnet-request:
it throws an exception.