Can NLog v2 be used with Common.Logging
Asked Answered
W

2

9

I tried using these together today, and was getting a version mismatch, as it's looking for NLog v1.

Does Common.Logging support NLog v2 yet?

If not, does anyone know if an assembly version redirect can safely be used?

Wyck answered 17/5, 2011 at 8:9 Comment(3)
did you find a solution to this - I've run into the same issue myself and am running into difficulty figuring out code changes required in Common.Logging to make it compile against NLog 2.0Zephyr
@Zephyr - not yet unfortunately, currently I'm using an earlier version of NLogWyck
@Wyck did you try assembly redirect? I checked the Common.Logging's use of NLog, it seems to be compatible with NLog2.Specialty
S
7

You can simply do assembly redirect in app.config or web.config, and CommonLogging will just work fine with NLog2 by using NLog2 as logging framework:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

The only issue is if you want to redirect NLog message to some other logging framework using CommonLogging 2.0, then there is a compatibility issue. But that is a very unusual use case.

Specialty answered 29/7, 2011 at 16:6 Comment(2)
This does not work completely. I get error when Common.Logging.NLog tries to load NLog.TargetWithLayout, but the class was moved to NLog.Targets.TargetWithLayoutso loading fails. This seems to work for many people so the next thing is to find out if using MEF breaks this.Lilytrotter
I got this work by compiling the Common.Logging source against NLog 2.0. Changes required were quite minimal. Only change Common.Logging.NLog.CommonLoggingTargets baseclass to NLog.Targets.TargetWithLayout and replace line 90 with log(logger, delegate { return this.Layout.Render(logEvent); }, logEvent.Exception);. Not a pretty solution, but works for me for now.Lilytrotter
C
1

If you used Nuget to get the Common.Logging.NLog library, the package will download Common.Logging v2.0 dependency. If you use Nuget to update Common.Logging, it will update it to v2.1.1.0, which will prevent the Could not load file or assembly 'NLog, Version=1.0.0.505 error.

Crockery answered 26/8, 2012 at 5:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.