给 asp.net core 写个中间件来记录接口耗时
给 asp.net core 写个中间件来记录接口耗时
Intro
写接口的难免会遇到别人说接口比较慢,到底慢多少,一个接口服务器处理究竟花了多长时间,如果能有具体的数字来记录每个接口耗时多少,别人再说接口慢的时候看一下接口耗时统计,如果几毫秒就处理完了,对不起这锅我不背。
中间件实现
asp.net core 的运行是一个又一个的中间件来完成的,因此我们只需要定义自己的中间件,记录请求开始处理前的时间和处理结束后的时间,这里的中间件把请求的耗时输出到日志里了,你也可以根据需要输出到响应头或其他地方。
public static class PerformanceLogExtension
{ public static IApplicationBuilder UsePerformanceLog(this IApplicationBuilder applicationBuilder) { applicationBuilder.Use(async (context, next) => { var profiler = new StopwatchProfiler(); profiler.Start(); await next(); profiler.Stop(); var logger = context.RequestServices.GetService<ILoggerFactory>() .CreateLogger("PerformanceLog"); logger.LogInformation("TraceId:{TraceId}, RequestMethod:{RequestMethod}, RequestPath:{RequestPath}, ElapsedMilliseconds:{ElapsedMilliseconds}, Response StatusCode: {StatusCode}", context.TraceIdentifier, context.Request.Method, context.Request.Path, profiler.ElapsedMilliseconds, context.Response.StatusCode); }); return applicationBuilder; }
}
中间件配置
在 Startup
里配置请求处理管道,示例配置如下:
app.UsePerformanceLog();
app.UseAuthentication();
app.UseMvc(routes => { // ... });
// ...
示例
在日志里按 Logger 名称 “PerformanceLog” 搜索日志,日志里的 ElapsedMilliseconds
就是对应接口的耗时时间,也可以按 ElapsedMilliseconds
范围来搜索,比如筛选耗时时间大于 1s 的日志
Memo
这个中间件比较简单,只是一个处理思路。
大型应用可以用比较专业的 APM 工具,最近比较火的 [Skywalking](https://github.com/ apache/skywalking) 项目可以了解一下,支持 .NET Core, 详细信息参考: https://github.com/SkyAPM/SkyAPM-dotnet
Reference
https://github.com/WeihanLi/ActivityReservation
给 asp.net core 写个中间件来记录接口耗时相关推荐
- ASP.NET Core 中的中间件
前言 由于是第一次写博客,如果您看到此文章,希望大家抱着找错误.批判的心态来看. sky! 何为中间件? 在 ASP.NET Framework 中应该都知道请求管道.可参考:浅谈 ASP.NET ...
- 给 asp.net core 写一个简单的健康检查
给 asp.net core 写一个简单的健康检查 Intro 健康检查可以帮助我们知道应用的当前状态是不是处于良好状态,现在无论是 docker 还是 k8s 还是现在大多数的服务注册发现大多都提供 ...
- Asp.Net Core基于JWT认证的数据接口网关Demo
Asp.Net Core基于JWT认证的数据接口网关Demo 近日,应一位朋友的邀请写了个Asp.Net Core基于JWT认证的数据接口网关Demo.朋友自己开了个公司,接到的一个升级项目,客户要求 ...
- 如何在ASP.NET Core中编写自定义日志记录提供程序
目录 介绍 如何实现所需的接口 基础类和附件 FileLoggerProvider具体类及其附件 1. ConfigureLogging() 2. appsettings.json文件 介绍 源代码可 ...
- AspNetCoreRateLimit - ASP.NET Core 速率限制中间件。
介绍 AspNetCoreRateLimit 是一种 ASP.NET Core 速率限制解决方案,旨在控制客户端可以根据 IP 地址或客户端 ID 向 Web API 或 MVC 应用程序发出请求的速 ...
- 如何在 ASP.NET Core 中 自定义中间件
ASP.NET Core 是一个跨平台,开源的,轻量级,高性能 并且高度模块化的web框架,同时扩展性也是非常强,你可以在 request -> response 请求管道中安插各种中间件来根据 ...
- 理解ASP.NET Core中的中间件
中间件是ASP.NET Core的一个重要特点,ASP.NET Core应用程序之所以能够灵活地处理各种各样的请求,完成都是由于中间件,那么它究竟是怎么一回事呢? 一.理解中间件 ASP.NET Co ...
- asp.net core 自定义异常处理中间件
Intro 在 asp.net core 中全局异常处理,有时候可能不能满足我们的需要,可能就需要自己自定义一个中间件处理了,最近遇到一个问题,有一些异常,不希望记录错误日志,目前主要是用户请求取消导 ...
- ASP.NET Core URL Rewrite中间件
URL重写是基于一个或多个预置规则修改请求URL的行为.URL重写在资源位置和访问地址之间创建了一种抽象,这样二者之间就减少了紧密的联系.URL重写有多种适用的场景: 临时或永久移动或替换服务器资源, ...
最新文章
- 糟了,生产环境MySQL主从数据库不一致怎么办?!
- 莫名其妙的SqlServer更新错误:OleDbException 必须声明标量变量
- 【BZOJ】【4145】【AMPPZ2014】The Prices
- SpringBoot2.1.15(26) WebFlux快速上手——响应式Spring的道法术器
- Flutter实战一Flutter聊天应用(二十一)
- 论文笔记:语音情感识别(三)手工特征+CRNN
- 剑指offer---二叉树的镜像
- Shell学习笔记一
- 【论文阅读】Deep contextualized word representations
- 微信公众平台开发视频教程
- 米字格图片可打印_练字本米字格模板可打印行楷书
- L13. hrtimer使用实例(高精度定时器)
- 入门OSPF就这一篇足够了
- total-vm anon-rss file-rss shmem-rss含义
- CDH6.3.3 paywall版之前自定义http服务器放置parcels安装数据
- 【转】在网页中嵌入QQ 阿里旺旺 淘宝代码及详解
- label smoothingregularization (LSR)
- Solr初探(五)---Solr7.5利用DIH导入结构化数据构建索引
- BERT in tweet_sentiment_extraction
- 微软Windows8“消失”了的宣传壁纸