浅入 ABP系列(3):增加日志组件、依赖注入服务
版权护体作者:痴者工良,微信公众号转载文章需要 《NCC开源社区》同意。
前面两篇我们搭建了一个基础的、简单的,具有统一响应格式的 Web 程序,这一篇内容不多,继续增加一些需要的组件功能。
前面两篇已经搭建好基架,所以我们可以直接使用基架来逐渐增加功能,本系列后面的篇章会针对多方面的内容来逐渐讲解。
源码地址:https://github.com/whuanle/AbpBaseStruct
基架项目位置在 src/2/AbpBase 里面。
自动依赖注入
在 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;
}
完成后,源码可以参考 https://github.com/whuanle/AbpBaseStruct/tree/master/src/3/AbpBase
浅入 ABP系列(3):增加日志组件、依赖注入服务的更多相关文章
- 浅入 ABP 系列(4):事件总线
浅入 ABP 系列(4):事件总线 版权护体作者:痴者工良,微信公众号转载文章需要 <NCC开源社区>同意. 目录 浅入 ABP 系列(4):事件总线 事件总线 关于事件总线 为什么需要这 ...
- 浅入ABP(1):搭建基础结构的 ABP 解决方案
浅入ABP(1):搭建基础结构的 ABP 解决方案 目录 浅入ABP(1):搭建基础结构的 ABP 解决方案 搭建项目基础结构 ApbBase.Domain.Shared 创建过程 ApbBase.D ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- [Abp vNext 源码分析] - 3. 依赖注入与拦截器
一.简要说明 ABP vNext 框架在使用依赖注入服务的时候,是直接使用的微软提供的 Microsoft.Extensions.DependencyInjection 包.这里与原来的 ABP 框架 ...
- [Abp 源码分析]三、依赖注入
0.简要介绍 在 Abp 框架里面,无时无刻不存在依赖注入,关于依赖注入的作用与好处我就不在这里多加赘述了,网上有很多解释的教程.在 [Abp 源码分析]一.Abp 框架启动流程分析 里面已经说过,A ...
- 解读ASP.NET 5 & MVC6系列(7):依赖注入
在前面的章节(Middleware章节)中,我们提到了依赖注入功能(Dependency Injection),ASP.NET 5正式将依赖注入进行了全功能的实现,以便开发人员能够开发更具弹性的组件程 ...
- [转]解读ASP.NET 5 & MVC6系列(7):依赖注入
本文转自:http://www.cnblogs.com/TomXu/p/4496440.html 在前面的章节(Middleware章节)中,我们提到了依赖注入功能(Dependency Inject ...
- 循序渐进学.Net Core Web Api开发系列【11】:依赖注入
系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍如 ...
- ABP源码分析六:依赖注入的实现
ABP的依赖注入的实现有一个本质两个途径:1.本质上是依赖于Castle这个老牌依赖注入的框架.2.一种实现途径是通过实现IConventionalDependencyRegistrar的实例定义注入 ...
- asp.net core 系列 3 依赖注入服务
一. 依赖注入概述 在软件设计的通用原则中,SOLID是非常流行的缩略语,它由5个设计原则的首字母构成:单一原则(S).开放封闭原则(O).里氏替换原则(L).接口分离原则(I).依赖反转原则(D). ...
随机推荐
- with(上下文管理器)的用法
with语句可以自动管理上下文资源,不论什么原因(成功或失败)跳出with语句,都能保证文件正确关闭,并 释放资源,不用手动去close掉资源 1.with语句中有两个内置方法__enter__和__ ...
- Paddlenlp之UIE关系抽取模型【高管关系抽取为例】
往期项目回顾: Paddlenlp之UIE模型实战实体抽取任务[打车数据.快递单] Paddlenlp之UIE分类模型[以情感倾向分析新闻分类为例]含智能标注方案) 应用实践:分类模型大集成者[Pad ...
- Flask 框架:实现简单API测试接口
通过使用Python中Flask框架实现一个简单的API接口程序,用户可发送JSON格式的请求,服务器响应请求,并以JSON格式将数据返回给用户,此处代码是一个模板可以测试接口时使用. Flask代码 ...
- Linux 多种方式实现文件共享
文件共享服务在Linux系统上有多种方式,最常用的有Samba,vsftp,iSCSI,NFS这四种方式,如下将分别配置四种不同的文件共享服务. VSFTP 文件传输 FTP是文件传输协议.用于Int ...
- SpringBoot 整合多数据源的事务问题
代码 先贴代码: 核心就是:Spring给我们提供的一个类 AbstractRoutingDataSource,然后我们再写一个切面来切换数据源,肯定要有一个地方存储key还要保证上下文都可用,所以我 ...
- 佳翼M2X16 PCIE4.0X16转4盘M.2NVME固态硬盘 - 我的硬件配置
- PCIe Gen 4 SSD主控大盘点:7000MB/s高速时代,到底谁能称王?
[硬件编年史]自2006年世界上第一款搭载固态硬盘的电脑诞生之后,消费级SSD经过十几年的发展,从一开始的SATA 6Gbps SSD,到坚挺了十年的PCIe Gen 3 SSD,再到PCIe Gen ...
- GA算法|遗传算法|SYSU期末课程设计|Python+Matlab实现|超完备代码实现
前言 那么这里博主先安利一下一些干货满满的专栏啦! Linux专栏https://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014 ...
- CF145E Lucky Queries 题解
题目链接:CF 或者 洛谷 前置知识点:序列操作 本文关键词 约定俗称:因为频繁敲最长不下降子序列 \(LNCS\) 和最长不上升子序列 \(LNIS\) 太麻烦了,下文将 \(000011111\) ...
- Postgresql-数据库无法停止,报错:pg_ctl server does not shut down
根据您的查询,pg_ctl server does not shut down(pg_ctl服务无法关闭)的原因可能有很多.以下是一些可能的解决方案和代码示例: (1)杀死所有与PostgreSQL相 ...