2009-02-25 18 views
5

Nel mio progetto corrente sto usando due librerie in cui si utilizza log4net e l'altro NLog per la sua registrazione. Personalmente preferisco NLog quindi è usato anche nella mia applicazione.in avanti da log4net a NLog

Non conosco molto di log4net, quindi mi sto chiedendo quale sarebbe il modo migliore per inoltrare in modo programmatico tutti i messaggi da log4net a NLog.

C'è un post about a log4net forwarder at the NLog forum ma sembra che nessuno lo abbia mai fatto prima.

+0

Eliminerei del tutto NLog. È stato pubblicizzato come un'alternativa migliore, ma il suo creatore ha smesso di lavorarci dopo essere stato assunto da Microsoft, il che è un peccato .. Ho iniziato a usare log4net in seguito e mi piace di più, forse dare un'occhiata alla documentazione e vedere per te stesso. –

+0

Grazie per il suggerimento ... Prenderò in considerazione l'utilizzo di log4net per la mia applicazione invece – Martin

+9

NLog sembra essere molto attivo :-) –

risposta

6

creare un Appender log4net personalizzato che registra i messaggi in un registratore nlog. questa può essere almeno la soluzione se si desidera solo passare le informazioni del registro a nlog invece di sostituire tutte le occorrenze della registrazione di log4net con nlog.

sguardo here, here e here

+2

Controlla anche questo post: https://forum.hibernate.org/viewtopic.php?p=2375611 – UpTheCreek

+0

Esiste un pacchetto Nuget che esegue il mapping da log4net a NLog. https://github.com/lanwin/log4net.NLogAppender 1. Installa con Nuget. Pacchetto di installazione log4net.NLogAppender 2. Riferimento in C#: NLogAppender.Initialize(); – Marksl

2

In pratica avrete bisogno di un log4net appender (log4net.Appender.IAppender) che delegare tutte le chiamate verso DoAppend NLogs' Logger o Target.

1

Sto cercando di farlo stasera. Vedo Commons.Logging dice che ha un routing di eventi bidirezionale tra le librerie di logging.

  1. Usa NuGet per aggiungere Common.Logging.log4net e Common.Logging.NLog (che otterrà log4net e NLog via dipendenze tra pacchetti)
  2. aggiungere la configurazione di seguito.
  3. In Main() inizializza log4net utilizzando 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> 

Riferimenti: Common.Logging Bridging Logging Systems

completa evento bi-direzionale di routing supporto per EntLib 3.1, 4.1 EntLib, log4net 1.2.9, log4net 1.2 .10 e NLog registrazione

Problemi correlati