為ABP框架增加日志組件與依賴注入服務(wù)
自動(dòng)依賴注入
在 AbpBase.Web
的 AbpBaseWebModule
中,添加一個(gè)函數(shù):
此函數(shù)用于掃描模塊中的服務(wù),自動(dòng)將其加入容器中,這樣就不需要收到加入了。
/// <summary> /// 自動(dòng)掃描所有的服務(wù)并進(jìn)行依賴注入 /// </summary> /// <param name="context"></param> private void ConfigureAutoIoc(ServiceConfigurationContext context) { context.Services.AddAssemblyOf<IoTCenterApplicationModule>(); context.Services.AddAssemblyOf<IoTCenterWebModule>(); }
然后在 ConfigureServices
里面,加上
// 配置依賴注入服務(wù) ConfigureAutoIoc(context);
這些模塊中繼承了 ITransientDependency
接口的類型都會(huì)被自動(dòng)注入到 DI 容器中。
添加日志依賴
ABP 中,封裝了 Serilog 作為日志組件,大家可以在 AbpBase.Web
項(xiàng)目 中使用 Nuget 安裝 Volo.Abp.AspNetCore.Serilog
包,版本為 3.1.2。
因?yàn)?Web 是最上層部分,Volo.Abp.AspNetCore.Serilog
已經(jīng)封裝好了,但是功能還不夠多,所以我們還需要需要繼續(xù)添加 Serilog 提供的拓展。
由于 AbpBase.Application
模塊是服務(wù)提供模塊,也是要使用到日志功能的,所以我們需要在 AbpBase.Application
中,用 Nuget 添加 兩個(gè)包:
Serilog.AspNetCore
包,版本 3.4.0;
Serilog.Sinks.Async
包,版本 1.4.0
;
然后在 AbpBaseApplicationModule
中,增加一個(gè)注入:
public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddSingleton<Serilog.ILogger>(Serilog.Log.Logger); }
添加日志功能
日志往往要分級(jí)、按日期記錄等,因此我們這里配置一個(gè)簡(jiǎn)單的分級(jí)日志配置。
在 Program.cs
中,添加一個(gè)函數(shù):
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(); }
這個(gè)函數(shù)中配置了 Seriolg 日志輸出,我們將日志分成 Error.txt
、Fatal.txt
、logs.txt
三個(gè)等級(jí),還設(shè)置按日期新建日志文件,并且每個(gè)日志文件最大為 8 MB。
讀者可以根據(jù)情況自行調(diào)整。
然后在 CreateHostBuilder
后面加上:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }) .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(); } }
之后我們將可以獲得一個(gè)帶有日志功能的 Web 程序了。
依賴注入
如果你需要使用日志服務(wù),則可以引用 using Serilog;
,
然后使用以下格式使用注入服務(wù):
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
到此這篇關(guān)于為ABP框架增加日志組件與依賴注入服務(wù)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
.Net創(chuàng)建型設(shè)計(jì)模式之原型模式(Prototype)
這篇文章介紹了.Net設(shè)計(jì)模式之原型模式(Prototype),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05ASP.NET MVC中_ViewStart.cshtml作用介紹
這篇文章介紹了ASP.NET MVC中_ViewStart.cshtml的作用,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03Blazor路由與頁(yè)面導(dǎo)航開發(fā)介紹
這篇文章介紹了Blazor路由與頁(yè)面導(dǎo)航開發(fā),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01那些年,我還在學(xué)asp.net(一) 學(xué)習(xí)筆記
那些年到此,基本學(xué)習(xí)了前端的基本知識(shí),那些年的第四課就是asp.net,當(dāng)然那時(shí)看了很多教程,比如說:天轟穿,當(dāng)然天轟穿說得比較多,如面向?qū)ο?,C#知識(shí),由于當(dāng)時(shí)上過C++,所以就沒有看這些,直接從asp.net開始,主要是學(xué)習(xí)一下asp.net用到的一些基本控件2012-03-03創(chuàng)建ASP.NET?Core?Web應(yīng)用程序并介紹項(xiàng)目模板
這篇文章介紹了創(chuàng)建ASP.NET?Core?Web應(yīng)用程序的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02ASP.NET Core應(yīng)用啟動(dòng)Startup類簡(jiǎn)介
這篇文章介紹了ASP.NET Core中的應(yīng)用啟動(dòng)Startup類,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04