2009-02-25 18 views
5

W moim bieżącym projekcie używam dwóch bibliotek, w których jedna używa log4net, a druga NLog do jej logowania. Osobiście wolę NLog, więc jest on również używany w mojej aplikacji.dalej od log4net do NLog

Nie znam się na log4net, więc pytam, jaki byłby najlepszy sposób na programowe przekazywanie wszystkich wiadomości z log4net do NLog.

Istnieje post about a log4net forwarder at the NLog forum, ale wygląda na to, że nikt wcześniej tego nie zrobił.

+0

Całkowicie zrezygnowałbym z NLog. Zostało to reklamowane jako lepsza alternatywa, ale jego twórca przestał nad nim pracować po tym, jak został zatrudniony przez Microsoft, co jest wstydem. Zacząłem używać log4net później i lubię to bardziej, może zajrzyj do dokumentacji i zobacz siebie. –

+0

Dzięki za podpowiedź ... Rozważę użycie log4net do mojej aplikacji. – Martin

+9

NLog wydaje się być bardzo aktywny :-) –

Odpowiedz

6

utwórz niestandardowego Appendera log4net, który rejestruje komunikaty w dzienniku nlog. może to być przynajmniej rozwiązanie, jeśli chcesz po prostu przekazać informacje dziennika do protokołu nlog zamiast zastępować wszystkie zdarzenia logowania log4net za pomocą protokołu nlog.

wyglądać here, here i here

+2

Sprawdź także ten post: https://forum.hibernate.org/viewtopic.php?p=2375611 – UpTheCreek

+0

Istnieje pakiet Nuget, który mapuje z log4net do NLog. https://github.com/lanwin/log4net.NLogAppender 1. Zainstaluj z Nuget. Zainstaluj-pakiet log4net.NLogAppender 2. Odwołaj go w języku C#: NLogAppender.Initialize(); – Marksl

2

Zasadniczo trzeba mieć log4net appender (log4net.Appender.IAppender), które delegować wszystkie DoAppend wywołań NLogs' Logger lub Target.

1

Próbuję zrobić to dziś wieczorem. Widzę Commons.Logging mówi, że ma dwukierunkowe routing zdarzeń między bibliotekami rejestrowania.

  1. Zastosowanie Nuget dodać Common.Logging.log4net i Common.Logging.NLog (który dostanie log4net i NLog poprzez zależności między pakietami)
  2. Dodaj konfigurację poniżej.
  3. W Main() Inicjalizuj log4net pomocą 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> 

publikacjach: Common.Logging Bridging Logging Systems

Pełny dwukierunkowy zdarzenie trasowania obsługę Entlib 3.1 EntLib log4net 4.1, 1.2.9, 1.2 log4net .10 i NLog logowanie