为ABP框架增加日志组件与依赖注入服务

作者:痴者工良 时间:2024-06-05 15:43:32 

自动依赖注入

在 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.txtFatal.txtlogs.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://github.com/whuanle/AbpBaseStruct/tree/master/src/3/AbpBase

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

来源:https://www.cnblogs.com/whuanle/p/13679979.html

标签:ABP,框架,日志,组件,依赖,注入
0
投稿

猜你喜欢

  • JS/jQuery实现简单的开关灯效果【案例】

    2024-04-18 09:30:38
  • Python读取环境变量的方法和自定义类分享

    2022-11-13 23:47:08
  • 分析Mysql大量数据导入遇到的问题以及解决方案

    2024-01-23 19:10:08
  • Linux下Centos7安装Mysql5.7.19的详细教程

    2024-01-19 11:15:14
  • GO的基础知识扫盲注意事项

    2023-07-12 21:30:26
  • php比较两个指定的日期的实例讲解

    2023-06-13 12:11:29
  • 深度学习入门之Pytorch 数据增强的实现

    2021-04-05 22:26:07
  • 菜鸟课堂:玩转MySQL数据库 性能优化八法

    2009-03-25 14:44:00
  • python人工智能tensorflow函数tf.get_collection使用方法

    2023-08-09 14:27:54
  • JavaScript代码执行的先后顺序问题

    2024-04-29 13:45:54
  • python3中join和格式化的用法小结

    2022-03-02 01:45:22
  • 通过Python pyecharts输出保存图片代码实例

    2021-09-14 22:26:11
  • python中property和setter装饰器用法

    2022-04-20 21:38:03
  • Python为何不支持switch语句原理详解

    2023-03-27 08:37:27
  • 如何利用数据库内容建立一个下拉式列表?

    2010-01-01 15:46:00
  • python生成requirements.txt文件的推荐方法

    2021-02-04 01:02:30
  • Python 快速验证代理IP是否有效的方法实现

    2022-08-12 07:22:14
  • Python骚操作完美实现短视频伪原创

    2023-09-18 08:16:55
  • 分享一个超好用的php header下载函数

    2023-09-03 21:31:43
  • PHP解决高并发问题(opcache)

    2023-11-07 23:17:49
  • asp之家 网络编程 m.aspxhome.com