Используйте AbpCastleLog4NetModule в модуле Abp

У меня есть эта библиотека классов (стандарт .net), которая содержит модуль Abp, и я хочу регистрировать исключения через AbpCastleLog4NetModule. эта библиотека классов будет использоваться в проекте основной консоли .net.

[DependsOn(typeof(ANOTHERMODULE),typeof(AbpCastleLog4NetModule))]
public class MyModule : AbpModule
    {
        public override void PostInitialize()
        {
            var waitTime = 30000;
            timer = new Timer((x) =>
            {
                Integration();
            }, null, 0, waitTime);

        }
        private void Integration()
        {
            var waitTime=30000;
            timer.Change(Timeout.Infinite, Timeout.Infinite);
            foreach (var sftpOptions in optionsCollections)
            {
                try
                {
                    //Do Something

                }
                catch (Exception ex)
                {
                    //log errors
                }
            }
            timer.Change(waitTime, waitTime);
        }
    }

может кто-нибудь помочь мне с рабочим образцом?


person Sara NikitaUsefi    schedule 31.12.2019    source источник
comment
Прочтите документацию: aspnetboilerplate.com/Pages/Documents/Logging   -  person aaron    schedule 31.12.2019


Ответы (1)


Я наконец нашел свой ответ в загрузчике:

using Abp;
using Abp.Castle.Logging.Log4Net;
using Abp.Dependency;
using Castle.Facilities.Logging;
using System;

namespace MYNAMESPACE
{
    class Program
    {
        static void Main(string[] args)
        {
            //Bootstrapping ABP system
            using (var bootstrapper = AbpBootstrapper.Create<MYMODULE>())
            {
                IocManager.Instance.IocContainer.AddFacility<LoggingFacility>(f => f.UseAbpLog4Net().WithConfig("log.config"));
                bootstrapper.Initialize();
                Console.WriteLine("Press enter to exit...");
                Console.ReadLine();
            }
            Console.ReadLine();
        }
    }
}

И внутри MyModule у меня есть:

    public class MYMODULE: AbpModule
        {
            Timer timer;
            private static readonly ILog log = LogManager.GetLogger(typeof(MYMODULE));
            public override void PreInitialize()
            {
                log.Error("MyMessage");
            }
        }

и внутри моего log.config я могу настроить свой параметр для ведения журнала (например, я могу установить конфигурацию для log4net, graylog или обоих):

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <file value="C:\Temp\" />
    <datePattern value="yyyy-MM-dd.'txt'"/>
    <staticLogFileName value="false"/>
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <maxSizeRollBackups value="100"/>
    <maximumFileSize value="15MB"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level App  %newline %message %newline %newline"/>
    </layout>
  </appender>
      <appender name="GelfHttpAppender" type="Gelf4Net.Appender.GelfHttpAppender, Gelf4Net.HttpAppender">
        <url value="http://MYURL/gelf" />
        <layout type="Gelf4Net.Layout.GelfLayout, Gelf4Net.Core">
          <param name="AdditionalFields" value="app:MYAPP,version:1.0,Environment:Dev,Level:%level" />
          <param name="Facility" value="RandomPhrases" />
          <param name="IncludeLocationInformation" value="true" />
        </layout>
      </appender>

      <root>
        <level value="All"/>
        <appender-ref ref="GelfHttpAppender"/>
      </root>
    </log4net>
person Sara NikitaUsefi    schedule 18.01.2020