Domanda

Nel mio progetto in corso che sto utilizzando due librerie in cui si sta usando log4net e l'altro NLog per la sua registrazione. Sto personalmente preferisco NLog modo che viene utilizzato nella mia applicazione pure.

Non sto sapere molto su log4net quindi mi chiedo quale sarebbe il modo migliore per programmazione in avanti tutti i messaggi dalla log4net a NLog.

C'è un post su uno spedizioniere log4net al NLog forum ma sembra come nessuno aveva fatto prima.

È stato utile?

Soluzione

creare un Appender log4net personalizzato che registra i messaggi a un logger nlog. questo può essere, almeno la soluzione se si desidera solo per passare le informazioni di log per NLog invece di sostituire tutte le occorrenze di registrazione log4net con nlog.

qui , qui e qui

Altri suggerimenti

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

Sto cercando di farlo stasera. Vedo Commons.Logging dice che ha evento bidirezionale routing tra le biblioteche di registrazione.

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

  

di routing evento bidirezionale completa   il supporto per EntLib 3.1, EntLib 4.1,   log4net 1.2.9, 1.2.10 e log4net NLog   la registrazione

Basta usare log4net.NLogAppender

Link Nuget: https://www.nuget.org/packages/log4net.NLogAppender /

Nuget installazione: Install-Package log4net.NLogAppender

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top