6

私の現在のプロジェクトでは、2 つのライブラリを使用しています。1 つは log4net を使用し、もう 1 つは NLog をロギングに使用しています。個人的には NLog の方が好きなので、アプリケーションでも使用しています。

私はlog4netについてあまり知らないので、log4netからNLogにすべてのメッセージをプログラムで転送する最良の方法は何かを尋ねています.

NLog フォーラムに log4net フォワーダーに関する投稿がありますが、以前は誰もこれを行っていなかったようです。

4

4 に答える 4

7

メッセージをnlogロガーに記録するカスタムlog4netアペンダーを作成します。これは、log4netロギングのすべての発生をnlogに置き換えるのではなく、ログ情報をnlogに渡すだけの場合は、少なくとも解決策になる可能性があります。

ここここここを見てください

于 2009-02-25T14:43:16.117 に答える
2

基本的に、すべての呼び出しをNLogsまたはに委任するlog4netアペンダー( )が必要になります。log4net.Appender.IAppenderDoAppendLoggerTarget

于 2009-02-25T14:44:43.773 に答える
1

私は今夜​​これをやろうとしています。Commons.Logging には、ロギング ライブラリ間で双方向のイベント ルーティングがあると書かれています。

  1. NuGet を使用して、Common.Logging.log4net と Common.Logging.NLog を追加します (パッケージの依存関係を介して log4net と NLog を取得します)。
  2. 以下の構成を追加します。
  3. を使用してlog4netMain()を初期化する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 ブリッジ ロギング システム

Entlib 3.1、EntLib 4.1、log4net 1.2.9、log4net 1.2.10、および NLog ロギングの完全な双方向イベント ルーティング サポート

于 2011-06-29T07:38:45.040 に答える