日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

為ABP框架增加日志組件與依賴注入服務_基礎應用

作者:癡者工良 ? 更新時間: 2022-04-27 編程語言

自動依賴注入

在?AbpBase.Web?的?AbpBaseWebModule?中,添加一個函數:

此函數用于掃描模塊中的服務,自動將其加入容器中,這樣就不需要收到加入了。

        /// 
        /// 自動掃描所有的服務并進行依賴注入
        /// 
        /// 
        private void ConfigureAutoIoc(ServiceConfigurationContext context)
        {
            context.Services.AddAssemblyOf();
            context.Services.AddAssemblyOf();
        }

然后在?ConfigureServices?里面,加上

            // 配置依賴注入服務
            ConfigureAutoIoc(context);

這些模塊中繼承了?ITransientDependency?接口的類型都會被自動注入到 DI 容器中。

添加日志依賴

ABP 中,封裝了 Serilog 作為日志組件,大家可以在?AbpBase.Web?項目 中使用 Nuget 安裝?Volo.Abp.AspNetCore.Serilog?包,版本為 3.1.2。

因為 Web 是最上層部分,Volo.Abp.AspNetCore.Serilog?已經封裝好了,但是功能還不夠多,所以我們還需要需要繼續添加 Serilog 提供的拓展。

由于?AbpBase.Application?模塊是服務提供模塊,也是要使用到日志功能的,所以我們需要在?AbpBase.Application?中,用 Nuget 添加 兩個包:

Serilog.AspNetCore?包,版本 3.4.0;

Serilog.Sinks.Async?包,版本?1.4.0?;

然后在?AbpBaseApplicationModule?中,增加一個注入:

        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            context.Services.AddSingleton(Serilog.Log.Logger);
        }

添加日志功能

日志往往要分級、按日期記錄等,因此我們這里配置一個簡單的分級日志配置。

在?Program.cs?中,添加一個函數:

        private static void ConfigLog()
        {
            Serilog.Log.Logger = new LoggerConfiguration()
#if DEBUG
                .MinimumLevel.Debug()
#else
                .MinimumLevel.Information()
#endif
                .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
                .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning)
                .Enrich.FromLogContext()
                .WriteTo.Async(c => c.File($"Logs/{DateTime.Now.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture)}-logs.txt"))
                .WriteTo.Logger(log =>
                        log.Filter.ByIncludingOnly(evt => evt.Level == LogEventLevel.Fatal)
                            .WriteTo.File(
                                $"Logs/{(DateTime.Now.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) + "-Fatal.txt")}",
                                fileSizeLimitBytes: 83886080),
                    LogEventLevel.Fatal)
                .WriteTo.Logger(log =>
                        log.Filter.ByIncludingOnly(evt => evt.Level == LogEventLevel.Error)
                            .WriteTo.File(
                                $"Logs/{(DateTime.Now.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) + "-Error.txt")}",
                                fileSizeLimitBytes: 83886080),
                    LogEventLevel.Fatal)
                .WriteTo.Console()
                .CreateLogger();
        }

這個函數中配置了 Seriolg 日志輸出,我們將日志分成?Error.txtFatal.txtlogs.txt?三個等級,還設置按日期新建日志文件,并且每個日志文件最大為 8 MB。

讀者可以根據情況自行調整。

然后在?CreateHostBuilder?后面加上:

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup();
                })
            .UseAutofac()
            .UseSerilog();

再將 Main 方法改成:

        public static int Main(string[] args)
        {
            try
            {
                ConfigLog();
                Serilog.Log.Information("Starting web host.");
                CreateHostBuilder(args).Build().Run();
                return 0;
            }
            catch (Exception ex)
            {
                Serilog.Log.Fatal("Host terminated unexpectedly!");
                return 1;
            }
            finally
            {
                Serilog.Log.CloseAndFlush();
            }
        }

之后我們將可以獲得一個帶有日志功能的 Web 程序了。

依賴注入

如果你需要使用日志服務,則可以引用?using Serilog;

然后使用以下格式使用注入服務:

        private readonly ILogger _ILogger;

        public CustomerExceptionHandler(ILogger logger)
        {
            _ILogger = logger;
        }

完成后,源碼可以參考?https://github.com/whuanle/AbpBaseStruct/tree/master/src/3/AbpBase

源碼地址:https://github.com/whuanle/AbpBaseStruct

原文鏈接:https://www.cnblogs.com/whuanle/p/13679979.html

欄目分類
最近更新