如何给asp.net core写个中间件记录接口耗时

 更新时间:2019年09月02日 15:46:43   作者:WeihanLi  
这篇文章主要给大家介绍了关于如何给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 项目可以了解一下,支持 .NET Core, 详细信息参考: https://github.com/SkyAPM/SkyAPM-dotnet

Reference

https://github.com/WeihanLi/ActivityReservation

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

相关文章

  • Asp.Net文本换行

    Asp.Net文本换行

    Asp.Net文本换行...
    2007-04-04
  • asp.net ajaxControlToolkit FilteredTextBoxExtender的简单用法

    asp.net ajaxControlToolkit FilteredTextBoxExtender的简单用法

    最近写的东西验证比较多,尤其是数字验证,无意中发现这个控件,有点儿意思。记录一下
    2008-11-11
  • asp.net中MD5 16位和32位加密函数

    asp.net中MD5 16位和32位加密函数

    asp.net中MD5 16位和32位加密函数...
    2007-03-03
  • 基于Jexus-5.6.3使用详解

    基于Jexus-5.6.3使用详解

    下面小编就为大家分享一篇基于Jexus-5.6.3使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • asp.net 删除项目文件/文件夹IIS重启,Session丢失问题

    asp.net 删除项目文件/文件夹IIS重启,Session丢失问题

    最近在做一个项目,涉及到大量文件中转(先上传到本项目的某个文件夹中,在移动到FTP中),后面发现每次一删除文件之后在做操作都会提示未登录,刚开始以为是WebService Session丢失问题,后面发现缓存也更新了
    2011-12-12
  • asp.net读取模版并写入文本文件

    asp.net读取模版并写入文本文件

    本文要介绍的是ASP.NET怎样读写文本文件,但更重要的是实现的过程。使用的工具是Visual Studio 2015 ,.NET版本是4.6.1 。一共建立的2个项目,HoverTreePanel和HoverTreeWeb,都是ASP.NET项目。文章末尾附源码下载。下面跟着小编一起来看下吧
    2017-01-01
  • VS2017做为Unity3D的脚本编辑器需要的最精简组件

    VS2017做为Unity3D的脚本编辑器需要的最精简组件

    这篇文章主要为大家详细介绍了VS2017做为Unity3D的脚本编辑器需要的最精简组件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Grid或者DataTable中数据导出为Excel原来这么简单

    Grid或者DataTable中数据导出为Excel原来这么简单

    以前一直认为,将Grid 或者DataTable中的数据导出到Excel功能实现会非常复杂,可能会想用什么类库什么的或者实在太难就用csv算了,没想到真的很简单,需要了解的朋友可以参考下
    2012-12-12
  • ABP入门系列之Json格式化

    ABP入门系列之Json格式化

    ,JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。本文重点给大家介绍ABP入门系列之Json格式化,需要的朋友可以参考下
    2017-03-03
  • docker部署Asp.net core应用的完整步骤

    docker部署Asp.net core应用的完整步骤

    这篇文章主要给大家介绍了关于docker部署Asp.net core应用的完整步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用Asp.net core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05

最新评论