给 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 写个中间件来记录接口耗时相关推荐

  1. ASP.NET Core 中的中间件

    前言   由于是第一次写博客,如果您看到此文章,希望大家抱着找错误.批判的心态来看. sky! 何为中间件? 在 ASP.NET Framework 中应该都知道请求管道.可参考:浅谈 ASP.NET ...

  2. 给 asp.net core 写一个简单的健康检查

    给 asp.net core 写一个简单的健康检查 Intro 健康检查可以帮助我们知道应用的当前状态是不是处于良好状态,现在无论是 docker 还是 k8s 还是现在大多数的服务注册发现大多都提供 ...

  3. Asp.Net Core基于JWT认证的数据接口网关Demo

    Asp.Net Core基于JWT认证的数据接口网关Demo 近日,应一位朋友的邀请写了个Asp.Net Core基于JWT认证的数据接口网关Demo.朋友自己开了个公司,接到的一个升级项目,客户要求 ...

  4. 如何在ASP.NET Core中编写自定义日志记录提供程序

    目录 介绍 如何实现所需的接口 基础类和附件 FileLoggerProvider具体类及其附件 1. ConfigureLogging() 2. appsettings.json文件 介绍 源代码可 ...

  5. AspNetCoreRateLimit - ASP.NET Core 速率限制中间件。

    介绍 AspNetCoreRateLimit 是一种 ASP.NET Core 速率限制解决方案,旨在控制客户端可以根据 IP 地址或客户端 ID 向 Web API 或 MVC 应用程序发出请求的速 ...

  6. 如何在 ASP.NET Core 中 自定义中间件

    ASP.NET Core 是一个跨平台,开源的,轻量级,高性能 并且高度模块化的web框架,同时扩展性也是非常强,你可以在 request -> response 请求管道中安插各种中间件来根据 ...

  7. 理解ASP.NET Core中的中间件

    中间件是ASP.NET Core的一个重要特点,ASP.NET Core应用程序之所以能够灵活地处理各种各样的请求,完成都是由于中间件,那么它究竟是怎么一回事呢? 一.理解中间件 ASP.NET Co ...

  8. asp.net core 自定义异常处理中间件

    Intro 在 asp.net core 中全局异常处理,有时候可能不能满足我们的需要,可能就需要自己自定义一个中间件处理了,最近遇到一个问题,有一些异常,不希望记录错误日志,目前主要是用户请求取消导 ...

  9. ASP.NET Core URL Rewrite中间件

    URL重写是基于一个或多个预置规则修改请求URL的行为.URL重写在资源位置和访问地址之间创建了一种抽象,这样二者之间就减少了紧密的联系.URL重写有多种适用的场景: 临时或永久移动或替换服务器资源, ...

最新文章

  1. 糟了,生产环境MySQL主从数据库不一致怎么办?!
  2. 莫名其妙的SqlServer更新错误:OleDbException 必须声明标量变量
  3. 【BZOJ】【4145】【AMPPZ2014】The Prices
  4. SpringBoot2.1.15(26) WebFlux快速上手——响应式Spring的道法术器
  5. Flutter实战一Flutter聊天应用(二十一)
  6. 论文笔记:语音情感识别(三)手工特征+CRNN
  7. 剑指offer---二叉树的镜像
  8. Shell学习笔记一
  9. 【论文阅读】Deep contextualized word representations
  10. 微信公众平台开发视频教程
  11. 米字格图片可打印_练字本米字格模板可打印行楷书
  12. L13. hrtimer使用实例(高精度定时器)
  13. 入门OSPF就这一篇足够了
  14. total-vm anon-rss file-rss shmem-rss含义
  15. CDH6.3.3 paywall版之前自定义http服务器放置parcels安装数据
  16. 【转】在网页中嵌入QQ 阿里旺旺 淘宝代码及详解
  17. label smoothingregularization (LSR)
  18. Solr初探(五)---Solr7.5利用DIH导入结构化数据构建索引
  19. BERT in tweet_sentiment_extraction
  20. 微软Windows8“消失”了的宣传壁纸

热门文章

  1. dvd vlc 复制_如何使用VLC翻录DVD
  2. sharding-jdbc学习
  3. 99. Recover Binary Search Tree
  4. 08 comet反向ajax
  5. 对C# 程序员来说现在是到目前为止最好的时代
  6. .net framework3.0_
  7. 6张图,带你深入理解GitOps,真硬核!
  8. .NET 6新特性试用 | record struct
  9. C# 使用Timer控件设置时间间隔
  10. 记一次 .NET 某电商定向爬虫 内存碎片化分析