2009-02-25 11 views
5

En mi proyecto actual estoy usando dos bibliotecas donde una está usando log4net y la otra NLog para su registro. Personalmente prefiero NLog, por lo que también se usa en mi aplicación.reenviar de log4net a NLog

No sé mucho sobre log4net, así que estoy preguntando cuál sería la mejor forma de reenviar programáticamente todos los mensajes de log4net a NLog.

Hay un post about a log4net forwarder at the NLog forum pero parece que nadie había hecho esto antes.

+0

Dejaría caer NLog por completo. Se publicitó como una mejor alternativa, pero su creador dejó de trabajar en ella después de ser contratado por Microsoft, lo cual es una pena. Empecé a usar log4net más adelante y me gusta más, tal vez eche un vistazo a la documentación y busque tú mismo. –

+0

Gracias por la sugerencia ... Consideraré utilizar log4net para mi aplicación en su lugar – Martin

+9

NLog parece estar muy activo :-) –

Respuesta

6

crear un apéndice log4net personalizado que registra los mensajes en un registrador nlog. esta puede ser al menos la solución si solo desea pasar la información de registro a nlog en lugar de reemplazar todas las ocurrencias de log4net logging con nlog.

vistazo here, here y here

+2

También vea esta publicación: https://forum.hibernate.org/viewtopic.php?p=2375611 – UpTheCreek

+0

Hay un paquete Nuget que se correlaciona de log4net a NLog. https://github.com/lanwin/log4net.NLogAppender 1. Instalar con Nuget. Install-Package log4net.NLogAppender 2. Referencia en C#: NLogAppender.Initialize(); – Marksl

2

Básicamente se necesita un log4net appender (log4net.Appender.IAppender) que delegar todas las llamadas a DoAppend NLogs' Logger o Target.

1

Estoy tratando de hacer esto esta noche. Veo Commons.Logging dice que tiene enrutamiento de eventos bidireccionales entre las bibliotecas de registro.

  1. Uso NuGet para añadir Common.Logging.log4net y Common.Logging.NLog (que recibirá log4net y Nlog a través de las dependencias de paquetes)
  2. Añadir la configuración a continuación.
  3. En Main() inicializar log4net usando 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> 

Referencias: Common.Logging Bridging Logging Systems

evento completo bi-direccional de enrutamiento soporte para EntLib 3,1, EntLib 4,1, log4net 1.2.9, log4net 1,2 .10 y NLog logging

Cuestiones relacionadas