前言

上次,我们介绍了如何《在业务层实现响应缓存》。

今天,我们同样使用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“

在业务层实现记录请求日志相关推荐

  1. 在业务层实现校验请求参数

    前言 在前面的文章中,我们介绍了在业务层实现管道模式: 响应缓存 记录请求日志 今天,我们同样使用IPipelineBehavior,介绍如何在业务层实现校验请求参数,用于检查输入是否满足业务要求. ...

  2. Springboot使用AOP记录请求日志和返回数据

    首先是日志表结构 DROP TABLE IF EXISTS `protal_logvo`; CREATE TABLE `protal_logvo` (`id` varchar(255) NOT NUL ...

  3. Java切面的使用,记录请求日志

    // 定义一个切面 @Aspect @Configuration public class LogRecordAspect {private static final Logger logger = ...

  4. nginx log记录请求响应日志及日志分割

    之前部署了quic的集群在aws,在测试的时候发现在大报文的情形下HTTP3的请求耗时比较不稳定,并且耗时比普通的HTTP2要大很多,就想看看请求的具体耗时有多少 请求响应日志记录 我的quic集群是 ...

  5. Java轻量级业务层框架Spring两大核心IOC和AOP原理

    IoC(Inversion of Control): IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些 ...

  6. SpringBoot - LogAroundAop MVC请求日志拦截

    代码测试,上线后的调试手段现在很多都喜欢用日志来处理,当我们需要查询某个接口报错的时候,直接看日志,问题描述不清晰, 会发现不知道前端传的什么参数,需要找前端确认,很耗时,所以加了一个请求入参和响应的 ...

  7. ASP.NET Web API 记录请求响应数据到日志的一个方法

    原文:ASP.NET Web API 记录请求响应数据到日志的一个方法 原文:http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-resp ...

  8. KgCaptcha 语序识别验证码请求日志记录

    前言 请求日志记录是一个非常普遍的功能,几乎可以涉及到所有的项目.所以一个方便使用的日志记录,将会方便日后的管理,于是我通过使用 KgCaptcha 在我的验证码项目中实现. 基本显示 表格记录的字段 ...

  9. 添加日志_第五章springboot2.0添加aop日志实现记录请求地址

    1. 添加spring-boot-starter-aop包 <dependency> <groupId>org.springframework.bootgroupId> ...

最新文章

  1. 异常处理汇总-后端系列
  2. 【深度解析】FPGA四大设计要点
  3. 安卓高手之路之PackageManagerservice
  4. python多边形裁剪
  5. Selenium3自动化测试——2. python编写简单自测代码
  6. python 网盘上传_python学习笔记 day32 实现网盘上传下载功能
  7. 二、在VMware中搭建PHP集成环境(lamp/lnmp/lanmp)
  8. 在cisco switch上配置MSTP
  9. 【编程技巧】——输入输出优化
  10. 北大光华女的超强面经! 感动之余,真的受益匪浅。
  11. PS 色彩平衡之算法公式原理详解及 Python 实现
  12. PMP 学习笔记 第8章 项目质量管理
  13. SpringBoot+支付宝支付(沙箱)
  14. c++程序设计基础-类与对象:继承
  15. vasp测试计算机,科学网—PWSCF 自洽计算、kpoints测试和ecut测试 - 叶小球的博文
  16. 【pytorch】时间序列预测 —— 同时预测多个分位点
  17. sqlite数据库连接方法
  18. 网页实现excel下载
  19. matlab微分方程求解并仿真
  20. MemBrain: Improving the Accuracy of PredictingTransmembrane Helices

热门文章

  1. svn强制要求提交注释
  2. C3P0 释放连接 的问题
  3. 51中断编程c语言,[新人求指教]51C语言编程可否用中断令循环结束提早结束
  4. MySQL外键创建失败1005原因总结
  5. h5c3 part6 flex
  6. css animation动画
  7. TCP/IP 协议简单分析(建立连接握手过程)
  8. [OIBH] 糖果盒(Candy Box)——又一个最大子矩形
  9. pm_bout_1/2_on_subway
  10. IBM软件OEM概览