如何为ABP框架增加日志组件并改写依赖注入服务为长尾词?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1026个文字,预计阅读时间需要5分钟。
目录+自动依赖注入+添加日志依赖+添加日志功能+依赖注入+自动依赖注入+在AbpBase.Web的AbpBaseWebModule中,添加一个函数:+此函数用于扫描模块中的服务,自动将其添加到容器中,这样就可以自动注入使用了。
目录
- 自动依赖注入
- 添加日志依赖
- 添加日志功能
- 依赖注入
自动依赖注入
在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; }
完成后,源码可以参考github.com/whuanle/AbpBaseStruct/tree/master/src/3/AbpBase
源码地址:github.com/whuanle/AbpBaseStruct
到此这篇关于为ABP框架增加日志组件与依赖注入服务的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持自由互联。
本文共计1026个文字,预计阅读时间需要5分钟。
目录+自动依赖注入+添加日志依赖+添加日志功能+依赖注入+自动依赖注入+在AbpBase.Web的AbpBaseWebModule中,添加一个函数:+此函数用于扫描模块中的服务,自动将其添加到容器中,这样就可以自动注入使用了。
目录
- 自动依赖注入
- 添加日志依赖
- 添加日志功能
- 依赖注入
自动依赖注入
在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; }
完成后,源码可以参考github.com/whuanle/AbpBaseStruct/tree/master/src/3/AbpBase
源码地址:github.com/whuanle/AbpBaseStruct
到此这篇关于为ABP框架增加日志组件与依赖注入服务的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持自由互联。

