代码之家  ›  专栏  ›  技术社区  ›  Martin

从log4net转发到nlog

  •  6
  • Martin  · 技术社区  · 16 年前

    在我当前的项目中,我使用两个库,其中一个使用log4net,另一个使用nlog进行日志记录。我个人更喜欢NLOG,所以它也在我的应用程序中使用。

    我对log4net不太了解,所以我想问一下,什么是以编程方式将所有消息从log4net转发到nlog的最佳方法。

    有一个 post about a log4net forwarder at the NLog forum 但看起来以前没人这么做过。

    4 回复  |  直到 7 年前
        1
  •  7
  •   Joachim Kerschbaumer    16 年前

    创建一个自定义的log4net附加器,将消息记录到一个nlog记录器中。如果您只想将日志信息传递给nlog,而不是用nlog替换所有出现的log4net日志,那么这至少是解决方案。

    here , here here

        2
  •  2
  •   Anton Gogolev    16 年前

    基本上你需要一个log4net 附属物 ( log4net.Appender.IAppender )它将委托所有 DoAppend 打电话给小木屋 Logger Target .

        3
  •  1
  •   Julian    8 年前

    我今晚想这么做。我看到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 登录中

        4
  •  0
  •   Manushin Igor    7 年前

    只使用 log4net.NLogAppender

    NuGET链接: https://www.nuget.org/packages/log4net.NLogAppender/

    Nuget安装: Install-Package log4net.NLogAppender