Nlog: LayoutRenderer cannot be found

Created on 3 Aug 2017  路  5Comments  路  Source: NLog/NLog

Type: Question
NLog version:

<PackageReference Include="NLog" Version="5.0.0-beta09" />
<PackageReference Include="NLog.Extensions.Logging" Version="1.0.0-rtm-beta5" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.4.1" />

Platform: ASP.NET Core 1.1

Current NLog config (database target is very similar to the example from https://github.com/nlog/NLog/wiki/Database-target)

<?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"
      autoReload="true"
      internalLogLevel="Warn"
      internalLogFile="c:\temp\internal.txt">


  <!-- define various log targets -->
  <targets>
    <!-- write logs to file -->
    <target xsi:type="File" name="allfile" fileName="c:\temp\nlog-all-${shortdate}.log"
                 layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />

    <target xsi:type="File" name="ownFile" fileName="c:\temp\nlog-own-${shortdate}.log"
              layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />

    <target xsi:type="Null" name="blackhole" />

    <target xsi:type="Database" name="database" >

      <dbHost>(localdb)\MSSQLLocalDB</dbHost>
      <dbDatabase>BvsDbContext</dbDatabase>

      <commandText>
        insert into dbo.Log (
        Application, Logged, Level, Message,
        Username,
        ServerName, Port, Url, Https,
        ServerAddress, RemoteAddress,
        Logger, CallSite, Exception
        ) values (
        @Application, @Logged, @Level, @Message,
        @Username,
        @ServerName, @Port, @Url, @Https,
        @ServerAddress, @RemoteAddress,
        @Logger, @Callsite, @Exception
        );
      </commandText>

      <parameter name="@application" layout="${appsetting:name=AppName:default=Unknown}" />
      <parameter name="@logged" layout="${date}" />
      <parameter name="@level" layout="${level}" />
      <parameter name="@message" layout="${message}" />

      <parameter name="@username" layout="${identity}" />

      <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="@logger" layout="${logger}" />
      <parameter name="@callSite" layout="${callsite}" />
      <parameter name="@exception" layout="${exception:tostring}" />
    </target>
  </targets>

  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />
    <logger name="*" minlevel="Trace" writeTo="database" />

    <!--Skip Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <logger name="*" minlevel="Trace" writeTo="ownFile" />
  </rules>
</nlog>

I'm trying to log to table in a SQL Server database, but some layout renderers cannot be found:

2017-08-03 14:21:25.4611 Error Error parsing layout appsetting will be ignored. Exception: System.ArgumentException: LayoutRenderer cannot be found: 'appsetting'
   at NLog.Config.Factory`2.CreateInstance(String name)
   at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr)
2017-08-03 14:21:25.5153 Error Error parsing layout identity will be ignored. Exception: System.ArgumentException: LayoutRenderer cannot be found: 'identity'
   at NLog.Config.Factory`2.CreateInstance(String name)
   at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr)
2017-08-03 14:21:25.5223 Error Error parsing layout aspnet-Request will be ignored. Exception: System.ArgumentException: LayoutRenderer cannot be found: 'aspnet-Request'. Is NLog.Web not included?
   at NLog.Config.Factory`2.CreateInstance(String name)
   at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr)
2017-08-03 14:21:25.5223 Error Error parsing layout aspnet-Request will be ignored. Exception: System.ArgumentException: LayoutRenderer cannot be found: 'aspnet-Request'. Is NLog.Web not included?
   at NLog.Config.Factory`2.CreateInstance(String name)
   at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr)
2017-08-03 14:21:25.5223 Error Error parsing layout aspnet-Request will be ignored. Exception: System.ArgumentException: LayoutRenderer cannot be found: 'aspnet-Request'. Is NLog.Web not included?
   at NLog.Config.Factory`2.CreateInstance(String name)
   at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr)
2017-08-03 14:21:25.5223 Error Error parsing layout aspnet-request will be ignored. Exception: System.ArgumentException: LayoutRenderer cannot be found: 'aspnet-request'. Is NLog.Web not included?
   at NLog.Config.Factory`2.CreateInstance(String name)
   at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr)
2017-08-03 14:21:25.5373 Error Error parsing layout aspnet-request will be ignored. Exception: System.ArgumentException: LayoutRenderer cannot be found: 'aspnet-request'. Is NLog.Web not included?
   at NLog.Config.Factory`2.CreateInstance(String name)
   at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr)
2017-08-03 14:21:25.5373 Error Error parsing layout aspnet-Request will be ignored. Exception: System.ArgumentException: LayoutRenderer cannot be found: 'aspnet-Request'. Is NLog.Web not included?
   at NLog.Config.Factory`2.CreateInstance(String name)
   at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr)
2017-08-03 14:21:25.5373 Error Error parsing layout aspnet-Request will be ignored. Exception: System.ArgumentException: LayoutRenderer cannot be found: 'aspnet-Request'. Is NLog.Web not included?
   at NLog.Config.Factory`2.CreateInstance(String name)
   at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr)
2017-08-03 14:21:25.5373 Error Error parsing layout aspnet-request will be ignored. Exception: System.ArgumentException: LayoutRenderer cannot be found: 'aspnet-request'. Is NLog.Web not included?
   at NLog.Config.Factory`2.CreateInstance(String name)
   at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr)
question

All 5 comments

@ndreisg When you look at the error message LayoutRenderer cannot be found, then it also asks you Is NLog.Web not included?

Have you tried to add <extentions> to your nlog.config:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="Warn"
      internalLogFile="c:\temp\internal.txt">

   <extensions>
     <add assembly="NLog.Web.AspNetCore"/>
   </extensions>
   .....
</nlog>

https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-(csproj---vs2017)

I have tried this and most exceptions now disappeared (only the "identity" renderer still can't be found).
However, the fields in my table are still not filled :/

However, the fields in my table are still not filled :/

That's probably some missing code in the startup.cs, please check

https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-(csproj---vs2017)

@ndreisg ${identity} is not supported by NetCore as shown by the platform support:

https://github.com/NLog/NLog/wiki/platform-support

Maybe ${aspnet-user-identity} can help you out, or maybe create your own custom layout-renderer with some help from stackoverflow:

https://stackoverflow.com/questions/30701006/how-to-get-the-current-logged-in-user-id-asp-net-core

To diagnose the problems with writing to database, then activate and check the NLog-InternalLogger. Maybe you need the following package-reference for the mssql-database:

<PackageReference Include="System.Data.SqlClient" Version="4.3.1" />

I assume your question has been answered, if not, let us know!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

carkov1990 picture carkov1990  路  3Comments

MaximRouiller picture MaximRouiller  路  3Comments

Jerefeny picture Jerefeny  路  3Comments

ericnewton76 picture ericnewton76  路  3Comments

FaMouZx3 picture FaMouZx3  路  3Comments