переслать из log4net в NLog - PullRequest
       10

переслать из log4net в NLog

6 голосов
/ 25 февраля 2009

В моем текущем проекте я использую две библиотеки, одна из которых использует log4net, а другая - NLog для ведения журнала. Я лично предпочитаю NLog, поэтому он также используется в моем приложении.

Я не очень разбираюсь в log4net, поэтому спрашиваю, как лучше всего программно переслать все сообщения из log4net в NLog.

На форуме NLog есть сообщение о пересылке log4net, но похоже, что никто не делал этого раньше.

Ответы [ 4 ]

7 голосов
/ 25 февраля 2009

создать пользовательский log4net Appender, который записывает сообщения в журнал nlog. это может быть, по крайней мере, решением, если вы просто хотите передать информацию журнала в nlog вместо того, чтобы заменять все случаи регистрации log4net на nlog.

смотрите здесь , здесь и здесь

2 голосов
/ 25 февраля 2009

В основном вам понадобится log4net appender (log4net.Appender.IAppender), который делегировал бы все DoAppend вызовы NLogs 'Logger или Target.

1 голос
/ 29 июня 2011

Я пытаюсь сделать это сегодня вечером. Я вижу, что Commons.Logging говорит, что имеет двунаправленную маршрутизацию событий между библиотеками журналов.

  1. Используйте NuGet для добавления Common.Logging.log4net и Common.Logging.NLog (который получит log4net и NLog через зависимости пакета)
  2. Добавьте конфигурацию ниже.
  3. В Main() инициализировать log4net, используя 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>

Ссылки: Common.Logging Bridging Logging Systems

Полная двунаправленная маршрутизация событий поддержка Entlib 3.1, EntLib 4.1, log4net 1.2.9, log4net 1.2.10 и NLog регистрация

0 голосов
/ 30 июля 2018

Просто используйте log4net.NLogAppender

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

Установка Nuget: Install-Package log4net.NLogAppender

...