Migrate from log4net to NLog

In my current project, I use two libraries in which one uses log4net and the other NLog to log it. I personally prefer NLog, so it is also used in my application.

I don't know much about log4net, so I ask what would be the best way to programmatically forward all messages from log4net to NLog.

There is a post about the log4net redirector on the NLog forum , but it looks like nobody has done this before.

+5
source share
3 answers

create a custom log4net Appender that logs messages in the nlog log. this may be at least a solution if you just want to pass log information to nlog instead of replacing all log4net log entries with nlog.

look here , here and here

+6
source

Basically, you need a log4net ( log4net.Appender.IAppender) application that delegates all calls DoAppendto NLogs' Loggeror Target.

+2
source

. , Commons.Logging , .

  • NuGet Common.Logging.log4net Common.Logging.NLog( log4net NLog )
  • .
  • Main() log4net log4net.Config.XmlConfigurator.Configure();
<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
    <sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets async="true">
      <target name="file" xsi:type="File" fileName="d:\logs\app1\logging.txt"/>
      <target name="console" xsi:type="ColoredConsole" />
    </targets>
    <rules>
      <logger name="*" writeTo="file"/>
      <logger name="*" writeTo="console"/>
    </rules>
  </nlog>
  <common>
    <logging>
      <factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog">
        <arg key="configType" value="INLINE" />
      </factoryAdapter>
    </logging>
  </common>
  <log4net>
    <!-- Commons.Logging will bridge the log4net messages to NLog, required to see TopShelf log messages -->
    <appender name="CommonLoggingAppender" type="Common.Logging.Log4Net.CommonLoggingAppender, Common.Logging.Log4Net">
      <layout type="log4net.Layout.PatternLayout, log4net">
        <param name="ConversionPattern" value="%level - %class.%method: %message" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="CommonLoggingAppender" />
    </root>
  </log4net>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

: Common.Logging

Full bi-directional event routing support Entlib 3.1, EntLib 4.1, log4net 1.2.9, log4net 1.2.10 and NLog input

+1
source

All Articles