版权护体作者:痴者工良,微信公众号转载文章需要 《NCC开源社区》同意。

前面两篇我们搭建了一个基础的、简单的,具有统一响应格式的 Web 程序,这一篇内容不多,继续增加一些需要的组件功能。

前面两篇已经搭建好基架,所以我们可以直接使用基架来逐渐增加功能,本系列后面的篇章会针对多方面的内容来逐渐讲解。

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

基架项目位置在 src/2/AbpBase 里面。

自动依赖注入

AbpBase.WebAbpBaseWebModule 中,添加一个函数:

此函数用于扫描模块中的服务,自动将其加入容器中,这样就不需要收到加入了。

        /// <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

浅入 ABP系列(3):增加日志组件、依赖注入服务的更多相关文章

  1. 浅入 ABP 系列(4):事件总线

    浅入 ABP 系列(4):事件总线 版权护体作者:痴者工良,微信公众号转载文章需要 <NCC开源社区>同意. 目录 浅入 ABP 系列(4):事件总线 事件总线 关于事件总线 为什么需要这 ...

  2. 浅入ABP(1):搭建基础结构的 ABP 解决方案

    浅入ABP(1):搭建基础结构的 ABP 解决方案 目录 浅入ABP(1):搭建基础结构的 ABP 解决方案 搭建项目基础结构 ApbBase.Domain.Shared 创建过程 ApbBase.D ...

  3. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  4. [Abp vNext 源码分析] - 3. 依赖注入与拦截器

    一.简要说明 ABP vNext 框架在使用依赖注入服务的时候,是直接使用的微软提供的 Microsoft.Extensions.DependencyInjection 包.这里与原来的 ABP 框架 ...

  5. [Abp 源码分析]三、依赖注入

    0.简要介绍 在 Abp 框架里面,无时无刻不存在依赖注入,关于依赖注入的作用与好处我就不在这里多加赘述了,网上有很多解释的教程.在 [Abp 源码分析]一.Abp 框架启动流程分析 里面已经说过,A ...

  6. 解读ASP.NET 5 & MVC6系列(7):依赖注入

    在前面的章节(Middleware章节)中,我们提到了依赖注入功能(Dependency Injection),ASP.NET 5正式将依赖注入进行了全功能的实现,以便开发人员能够开发更具弹性的组件程 ...

  7. [转]解读ASP.NET 5 & MVC6系列(7):依赖注入

    本文转自:http://www.cnblogs.com/TomXu/p/4496440.html 在前面的章节(Middleware章节)中,我们提到了依赖注入功能(Dependency Inject ...

  8. 循序渐进学.Net Core Web Api开发系列【11】:依赖注入

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍如 ...

  9. ABP源码分析六:依赖注入的实现

    ABP的依赖注入的实现有一个本质两个途径:1.本质上是依赖于Castle这个老牌依赖注入的框架.2.一种实现途径是通过实现IConventionalDependencyRegistrar的实例定义注入 ...

  10. asp.net core 系列 3 依赖注入服务

    一. 依赖注入概述 在软件设计的通用原则中,SOLID是非常流行的缩略语,它由5个设计原则的首字母构成:单一原则(S).开放封闭原则(O).里氏替换原则(L).接口分离原则(I).依赖反转原则(D). ...

随机推荐

  1. JQuery 源码解析一

    网上已经有很多解读 jQuery 源码的文章了,作为系列开篇的第一篇,思前想去起了个[深入浅出jQuery]的标题,资历尚浅,无法对 jQuery 分析的头头是道,但是 jQuery 源码当中确实有着 ...

  2. 深度学习实践篇[17]:模型压缩技术、模型蒸馏算法:Patient-KD、DistilBERT、DynaBERT、TinyBERT

    深度学习实践篇[17]:模型压缩技术.模型蒸馏算法:Patient-KD.DistilBERT.DynaBERT.TinyBERT 1.模型压缩概述 1.2模型压缩原有 理论上来说,深度神经网络模型越 ...

  3. PaddleHub--{超参优化AutoDL Finetuner}【二】

     相关文章: 基础知识介绍: [一]ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?_汀.的博客-CSDN博客_ernie模型 百度飞桨: ...

  4. Python 多线程爬取西刺代理

    西刺代理是一个国内IP代理,由于代理倒闭了,所以我就把原来的代码放出来供大家学习吧. 首先找到所有的tr标签,与class="odd"的标签,然后提取出来. 然后再依次找到tr标签 ...

  5. LyScript 批量搜索反汇编特征

    LyScript 插件实现对特定汇编指令片段的批量搜索功能,用户传入一个汇编指令列表,然后循环搜索该列表内的所有指令特征,如果找到了,则返回该指令的内存地址. 插件地址:https://github. ...

  6. Mygin中间件优化及logger日志中间件

    本篇是mygin的第七篇,参照gin框架,感兴趣的可以从 Mygin第一篇 开始看,Mygin从零开始完全手写,在实现的同时,带你一窥gin框架的核心原理实现. 目的 中间件Middleware优化 ...

  7. 解决.netWebAPI输出时间格式带T问题

    GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add( new Ne ...

  8. Intel 14代酷睿提前上架加拿大:涨价最多7%

    Intel将在10月17日正式发布14代酷睿,说白了就是13代酷睿升级版,代号就能说明一切--Raptor Lake Refresh. 首批发布的只是高端的K/KF系列,一共六款,分别是8+16 24 ...

  9. 从CPU100%高危故障到稳定在10%:一个月的优化之旅,成功上线!

    引言 经过三个月的开发,项目通过了所有测试并上线,然而,我们发现项目的首页几乎无法打开,后台一直发生超时错误,导致CPU过度负荷.在这次项目开发过程中,我制定了一份详细的技术优化方案.考虑到客户无法提 ...

  10. 普冉PY32系列(十一) 基于PY32F002A的6+1通道遥控小车II - 控制篇

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...