iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >为ABP框架增加日志组件与依赖注入服务
  • 716
分享到

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

2024-04-02 19:04:59 716人浏览 独家记忆
摘要

目录自动依赖注入添加日志依赖添加日志功能依赖注入自动依赖注入 在 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.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框架增加日志组件与依赖注入服务的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 为ABP框架增加日志组件与依赖注入服务

本文链接: https://www.lsjlt.com/news/140174.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 为ABP框架增加日志组件与依赖注入服务
    目录自动依赖注入添加日志依赖添加日志功能依赖注入自动依赖注入 在 AbpBase.Web 的 AbpBaseWebModule 中,添加一个函...
    99+
    2024-04-02
  • 为WPF框架Prism注册Nlog日志服务
    无论是Nlog还是Serilog, 它们都提供了如何快速在各类应用程序当中的快速使用方法。 尽管,你现在无论是在WPF或者ASP.NET Core当中, 都可以使用ServiceCo...
    99+
    2024-04-02
  • Angular4依赖注入之组件服务注入的示例分析
    这篇文章将为大家详细讲解有关Angular4依赖注入之组件服务注入的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。开发环境及开发语言:Angular 4 +Ang...
    99+
    2024-04-02
  • 怎么为WPF框架Prism注册Nlog日志服务
    这篇文章主要为大家展示了“怎么为WPF框架Prism注册Nlog日志服务”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么为WPF框架Prism注册Nlog日志服务”这篇文章吧。无论是Nlog还...
    99+
    2023-06-29
  • gozero微服务框架logx日志组件剖析
    目录addTenant api 和 rpc 的实现logx 日志组件剖析Go-zero 中 logx 是如何使用的?Logx 基本的数据结构Logx 的默认接口实现Logx 自定义存...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作