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

 更新时间:2022年02月23日 11:15:32   作者:痴者工良  
这篇文章介绍了为ABP框架增加日志组件与依赖注入服务的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

自动依赖注入

在 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

到此这篇关于为ABP框架增加日志组件与依赖注入服务的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 为ABP框架添加基础集成服务

    为ABP框架添加基础集成服务

    这篇文章介绍了为ABP框架添加基础集成服务的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • ASP.NET中HyperLink超链接控件的使用方法

    ASP.NET中HyperLink超链接控件的使用方法

    本文主要介绍HyperLink控件的基础用法以及在Repeater中绑定数据的一些技巧,希望能帮到大家。
    2016-04-04
  • C#简单获取屏幕鼠标坐标点颜色方法介绍

    C#简单获取屏幕鼠标坐标点颜色方法介绍

    C#简单获取屏幕鼠标坐标点颜色方法介绍;有需求的朋友可以参考下
    2012-11-11
  • Blazor框架简介

    Blazor框架简介

    Blazor是微软推出的基于.net平台以及http://ASP.net core技术的 交互式客户Web UI框架。这篇文章为大家简单介绍了Blazor框架,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • .NET6使WebApi获取访问者IP地址

    .NET6使WebApi获取访问者IP地址

    这篇文章介绍了.NET6使WebApi获取访问者IP地址的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • ASP.NET 入门的五个步骤

    ASP.NET 入门的五个步骤

    ASP.NET 入门的五个步骤...
    2007-01-01
  • .NET Core读取配置文件的方法

    .NET Core读取配置文件的方法

    这篇文章介绍了.NET Core读取配置文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-11-11
  • ASP.NET Core基础之Startup类

    ASP.NET Core基础之Startup类

    这篇文章介绍了ASP.NET Core基础之Startup类,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • 那些年,我还在学asp.net(一) 学习笔记

    那些年,我还在学asp.net(一) 学习笔记

    那些年到此,基本学习了前端的基本知识,那些年的第四课就是asp.net,当然那时看了很多教程,比如说:天轰穿,当然天轰穿说得比较多,如面向对象,C#知识,由于当时上过C++,所以就没有看这些,直接从asp.net开始,主要是学习一下asp.net用到的一些基本控件
    2012-03-03
  • Asp.net core前端框架Blazor介绍

    Asp.net core前端框架Blazor介绍

    这篇文章介绍了Asp.net core前端框架Blazor,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论