10

I'm attempting to use NuGet packages to configure Common.Logging to use NLog2 in an ASP.Net MVC project. Based on the information provided at the URLs below, I believe my loggers are configured properly, but I continue to get configuration errors.

Common.Logging Configuration Instructions

NLog Configuration Tutorial

I've added the following to web.config as per the instructions:

<configuration>
  <configSections>
      <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
      <sectionGroup name="common">
            <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
      </sectionGroup>
    </configSections>
    <common>
      <logging>
        <factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog20">
            <arg key="configType" value="INLINE" />
        </factoryAdapter>
      </logging>
    </common>
    <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <targets>
        <target name="logfile" xsi:type="file" filename="e:\logfile.txt" layout="${date:format=yyyy/MM/dd HH:mm:ss} ${message}" />
      </targets>
      <rules>
        <logger name="*" minlevel="Trace" writeTo="logfile" />
      </rules>
    </nlog> 
    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
        </dependentAssembly>
      </assemblyBinding>
    </runtime>
</configuration>

As far as I can tell, this is everything I should need to do but I'm getting configuration errors when I try to run the web project...

Parser Error Message: An error occurred creating the configuration section handler for common/logging: Unable to create type 'Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog20'

Can anyone offer suggestions on what's missing or in error?

Peter Bernier
  • 8,038
  • 6
  • 38
  • 53

2 Answers2

13

The problem seems to be that the default configuration added by the Common.Logging NuGet package (v2.0.0) is incorrect.

The runtime section in web.config needs to be changed to the following:

<dependentAssembly>
   <assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="2.0.0.0" />
  </dependentAssembly>

Note the oldVersion value. This seems to be what was causing the error (at least based on the scenario that I outlined in the question above).

See also this related GitHub issue: Possible Issues with Common.Logging / Common.Logging.NLog20 NuGet packages.

Fernando Correia
  • 21,803
  • 13
  • 83
  • 116
Peter Bernier
  • 8,038
  • 6
  • 38
  • 53
1

Worked for me by using

<factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog2">

instead of

<factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog20">

notice 20 vs 2 at the end.

TarasB
  • 2,407
  • 1
  • 24
  • 32
  • Hmm I don't think that exists - you must have logging assembly failure turned on (not really sure) – Nate-Wilkins Apr 14 '14 at 16:49
  • This is not really an answer rather superstitious , below given: Unable to create type 'Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog2' – PUG Nov 04 '14 at 01:18