在业务层实现记录请求日志
前言
上次,我们介绍了如何《在业务层实现响应缓存》。
今天,我们同样使用IPipelineBehavior,介绍如何在业务层实现记录请求日志,用于跟踪每个请求执行的耗时。
Demo
创建ASP.NET Core Web API项目,引用Nuget包:
MediatR
MediatR.Extensions.Microsoft.DependencyInjection
1.实现IPipelineBehavior
创建LoggingBehavior
,用于实现记录请求日志逻辑:
public class LoggingBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
{private readonly ILogger<LoggingBehavior<TRequest, TResponse>> _logger;public LoggingBehavior(ILogger<LoggingBehavior<TRequest, TResponse>> logger){_logger = logger;}public async Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate<TResponse> next){var stopwatch = new Stopwatch();stopwatch.Start();var response = await next();stopwatch.Stop();_logger.LogInformation($"{typeof(TRequest).Name}耗时:{stopwatch.ElapsedMilliseconds}");return response;}
}
2.注册IPipelineBehavior
修改Startup.cs:
services.AddMediatR(Assembly.GetExecutingAssembly());
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(LoggingBehaviour<,>))
3.测试
修改WeatherForecastController,使用Mediator:
public class WeatherForecastController : ControllerBase
{private readonly IMediator _mediator;public WeatherForecastController(IMediator mediator){this._mediator = mediator;}[HttpGet]public async Task<IEnumerable<WeatherForecast>> Get(){return await this._mediator.Send(new GetWeatherForecastQuery()); }
}public class GetWeatherForecastQuery : IRequest<IEnumerable<WeatherForecast>>
{
}internal class GetWeatherForecastQueryHandler : IRequestHandler<GetWeatherForecastQuery, IEnumerable<WeatherForecast>>
{public async Task<IEnumerable<WeatherForecast>> Handle(GetWeatherForecastQuery request, CancellationToken cancellationToken){await Task.Delay(1000);var rng = new Random();return Enumerable.Range(1, 1).Select(index => new WeatherForecast{ TemperatureC = rng.Next(-20, 55),Summary = Summaries[rng.Next(Summaries.Length)]}).ToArray();}
}
为了体现效果,代码里故意加了等待时间。
运行程序,在控制台界面可以看到输出的日志。
结论
可以看到,在业务层实现记录请求日志功能,十分的简单!
如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“
在业务层实现记录请求日志相关推荐
- 在业务层实现校验请求参数
前言 在前面的文章中,我们介绍了在业务层实现管道模式: 响应缓存 记录请求日志 今天,我们同样使用IPipelineBehavior,介绍如何在业务层实现校验请求参数,用于检查输入是否满足业务要求. ...
- Springboot使用AOP记录请求日志和返回数据
首先是日志表结构 DROP TABLE IF EXISTS `protal_logvo`; CREATE TABLE `protal_logvo` (`id` varchar(255) NOT NUL ...
- Java切面的使用,记录请求日志
// 定义一个切面 @Aspect @Configuration public class LogRecordAspect {private static final Logger logger = ...
- nginx log记录请求响应日志及日志分割
之前部署了quic的集群在aws,在测试的时候发现在大报文的情形下HTTP3的请求耗时比较不稳定,并且耗时比普通的HTTP2要大很多,就想看看请求的具体耗时有多少 请求响应日志记录 我的quic集群是 ...
- Java轻量级业务层框架Spring两大核心IOC和AOP原理
IoC(Inversion of Control): IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些 ...
- SpringBoot - LogAroundAop MVC请求日志拦截
代码测试,上线后的调试手段现在很多都喜欢用日志来处理,当我们需要查询某个接口报错的时候,直接看日志,问题描述不清晰, 会发现不知道前端传的什么参数,需要找前端确认,很耗时,所以加了一个请求入参和响应的 ...
- ASP.NET Web API 记录请求响应数据到日志的一个方法
原文:ASP.NET Web API 记录请求响应数据到日志的一个方法 原文:http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-resp ...
- KgCaptcha 语序识别验证码请求日志记录
前言 请求日志记录是一个非常普遍的功能,几乎可以涉及到所有的项目.所以一个方便使用的日志记录,将会方便日后的管理,于是我通过使用 KgCaptcha 在我的验证码项目中实现. 基本显示 表格记录的字段 ...
- 添加日志_第五章springboot2.0添加aop日志实现记录请求地址
1. 添加spring-boot-starter-aop包 <dependency> <groupId>org.springframework.bootgroupId> ...
最新文章
- 异常处理汇总-后端系列
- 【深度解析】FPGA四大设计要点
- 安卓高手之路之PackageManagerservice
- python多边形裁剪
- Selenium3自动化测试——2. python编写简单自测代码
- python 网盘上传_python学习笔记 day32 实现网盘上传下载功能
- 二、在VMware中搭建PHP集成环境(lamp/lnmp/lanmp)
- 在cisco switch上配置MSTP
- 【编程技巧】——输入输出优化
- 北大光华女的超强面经! 感动之余,真的受益匪浅。
- PS 色彩平衡之算法公式原理详解及 Python 实现
- PMP 学习笔记 第8章 项目质量管理
- SpringBoot+支付宝支付(沙箱)
- c++程序设计基础-类与对象:继承
- vasp测试计算机,科学网—PWSCF 自洽计算、kpoints测试和ecut测试 - 叶小球的博文
- 【pytorch】时间序列预测 —— 同时预测多个分位点
- sqlite数据库连接方法
- 网页实现excel下载
- matlab微分方程求解并仿真
- MemBrain: Improving the Accuracy of PredictingTransmembrane Helices