2009-02-25 10 views
5

In meinem aktuellen Projekt verwende ich zwei Bibliotheken, wo man log4net und den anderen NLog für seine Protokollierung verwendet. Ich persönlich bevorzuge NLog, so dass es auch in meiner Anwendung verwendet wird.von log4net zu NLog weiterleiten

Ich weiß nicht viel über log4net, also frage ich, was wäre der beste Weg, um alle Nachrichten von log4net zu NLog programmatisch weiterzuleiten.

Es gibt eine post about a log4net forwarder at the NLog forum, aber es sieht so aus, als hätte noch niemand dies getan.

+0

Ich würde NLog zusammen fallen lassen. Es wurde als eine bessere Alternative beworben, aber sein Schöpfer hörte auf, daran zu arbeiten, nachdem er von Microsoft angestellt wurde. Das ist eine Schande. Ich begann mit log4net später und ich mag es mehr, vielleicht werfen Sie einen Blick auf die Dokumentation und sehen Sie nach dich selber. –

+0

Danke für den Hinweis ... Ich werde log4net für meine Anwendung verwenden anstatt – Martin

+9

NLog scheint sehr aktiv zu sein :-) –

Antwort

6

Erstellen Sie einen benutzerdefinierten log4net Appender, der die Meldungen an einen Loglogger protokolliert. Dies kann zumindest die Lösung sein, wenn Sie nur die Log-Informationen an nlog übergeben möchten, anstatt alle log4net-Logging-Logs durch nlog zu ersetzen.

aussehen here, here und here

+2

Schauen Sie sich auch diesen Beitrag an: https://forum.hibernate.org/viewtopic.php?p=2375611 – UpTheCreek

+0

Es gibt ein Nuget-Paket, das von log4net auf NLog mappt. https://github.com/lanwin/log4net.NLogAppender 1. Installieren Sie mit Nuget. Install-Paket log4net.NLogAppender 2. Verweisen Sie es in C#: NLogAppender.Initialize(); – Marksl

2

Grundsätzlich benötigen Sie einen log4net appender (log4net.Appender.IAppender), die alle DoAppend Anrufe NLogs' Logger oder Target delegieren würde.

1

Ich versuche das heute Abend zu tun. Ich sehe Commons.Logging sagt, es hat bidirektionales Ereignis Routing zwischen Logging-Bibliotheken.

  1. Verwenden NuGet hinzufügen Common.Logging.log4net und Common.Logging.NLog (die log4net und NLog über Paketabhängigkeiten erhalten wird)
  2. die Konfiguration unten ein.
  3. In Main() initialize log4net mit 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> 

Referenzen: Common.Logging Bridging Logging Systems

Volle bidirektionale Ereignis-Routing- Unterstützung für EntLib 3.1, EntLib 4.1, log4net 1.2.9, log4net 1.2 .10 und NLog Protokollierung