سؤال

في مشروعي الحالي، أستخدم مكتبين حيث يستخدم المرء LOG4NET والآخر NLOG لتسجيله. أنا شخصيا أفضل nlog لذلك يتم استخدامه في طلبي كذلك.

أنا لا أعرف الكثير عن log4net لذلك أنا أسأل عما ستكون أفضل طريقة لإعادة توجيه جميع الرسائل برمجيا من LOG4NET إلى NLOG.

هناك نشر حول وكيل Log4net في منتدى NLOG لكن يبدو أن أي شخص قد فعل هذا من قبل.

هل كانت مفيدة؟

المحلول

قم بإنشاء Appance مخصص LOG4NET يسجل الرسائل إلى مسجل NLOG. قد يكون هذا الحل على الأقل إذا كنت ترغب فقط في تمرير معلومات السجل إلى NLOG بدلا من استبدال جميع نشطات تسجيل LOG4NET مع NLOG.

نظرة هنا, هنا و هنا

نصائح أخرى

أساسا سوف تحتاج إلى log4net appender. (log4net.Appender.IAppender) من شأنه أن يفوض كل شيء DoAppend يدعو إلى NLOGS Logger أو Target.

أحاول القيام بهذه هذه الليلة. أرى 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.loggging أنظمة التسجيل تجسيد

دعم توجيه الحدث ثنائي الاتجاه الكامل ل Entlib 3.1، Entlib 4.1، LOG4NET 1.2.9، LOG4NET 1.2.10 وسجل NLOG

مجرد استخدام log4net.nlogappender.

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

تركيب Nuget: Install-Package log4net.NLogAppender

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top