最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
为ABP框架增加日志组件与依赖注入服务
时间:2026-09-17 10:40:01 编辑:袖梨 来源:一聚教程网
自动依赖注入
在AbpBase.Web的AbpBaseWebModule中,添加一个函数:
此函数用于扫描模块中的服务,自动将其加入容器中,这样就不需要收到加入了。
/// <summary>/// 自动扫描所有的服务并进行依赖注入/// </summary>/// <param name="context"></param>private void ConfigureAutoIoc(ServiceConfigurationContext context){context.Services.AddAssemblyOf<IoTCenterApplicationModule>();context.Services.AddAssemblyOf<IoTCenterWebModule>();}
然后在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.ILogger>(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.txt、Fatal.txt、logs.txt三个等级,还设置按日期新建日志文件,并且每个日志文件最大为 8 MB。
读者可以根据情况自行调整。
然后在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();}}
之后我们将可以获得一个带有日志功能的 Web 程序了。
依赖注入
如果你需要使用日志服务,则可以引用using Serilog;,
然后使用以下格式使用注入服务:
private readonly ILogger _ILogger;public CustomerExceptionHandler(ILogger logger){_ILogger = logger;}
完成后,源码可以参考https://**git*hub.com/whuanle/AbpBaseStruct/tree/master/src/3/AbpBase
源码地址:https://gi*th*ub.*com/whuanle/AbpBaseStruct
到此这篇关于为ABP框架增加日志组件与依赖注入服务的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持一聚教程网。