如何給asp.net core寫個中間件記錄接口耗時
Intro
寫接口的難免會遇到別人說接口比較慢,到底慢多少,一個接口服務(wù)器處理究竟花了多長時間,如果能有具體的數(shù)字來記錄每個接口耗時多少,別人再說接口慢的時候看一下接口耗時統(tǒng)計,如果幾毫秒就處理完了,對不起這鍋我不背。
中間件實(shí)現(xiàn)
asp.net core 的運(yùn)行是一個又一個的中間件來完成的,因此我們只需要定義自己的中間件,記錄請求開始處理前的時間和處理結(jié)束后的時間,這里的中間件把請求的耗時輸出到日志里了,你也可以根據(jù)需要輸出到響應(yīng)頭或其他地方。
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 就是對應(yīng)接口的耗時時間,也可以按 ElapsedMilliseconds 范圍來搜索,比如篩選耗時時間大于 1s 的日志
Memo
這個中間件比較簡單,只是一個處理思路。
大型應(yīng)用可以用比較專業(yè)的 APM 工具,最近比較火的 Skywalking 項(xiàng)目可以了解一下,支持 .NET Core, 詳細(xì)信息參考: https://github.com/SkyAPM/SkyAPM-dotnet
Reference
https://github.com/WeihanLi/ActivityReservation
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
- ASP.NET?Core中Startup類、Configure()方法及中間件詳解
- ASP.NET?Core的中間件與管道介紹
- 詳解ASP.NET Core中間件Middleware
- 理解ASP.NET Core 中間件(Middleware)
- ASP.NET Core中間件初始化的實(shí)現(xiàn)
- ASP.NET Core 應(yīng)用程序中的靜態(tài)文件中間件的實(shí)現(xiàn)
- 詳解在ASP.NET Core中如何編寫合格的中間件
- 淺談ASP.NET Core 2.0 中間件(譯)
- ASP.NET Core中間件設(shè)置教程(7)
- ASP.NET Core基礎(chǔ)之中間件
相關(guān)文章
.Net中關(guān)于stirng轉(zhuǎn)System.Type的一種實(shí)現(xiàn)思路詳解
這篇文章主要給大家介紹了.Net中關(guān)于stirng轉(zhuǎn)System.Type的一種實(shí)現(xiàn)思路的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05理解ASP.NET?Core?錯誤處理機(jī)制(Handle?Errors)
這篇文章主要介紹了理解ASP.NET?Core?錯誤處理(Handle?Errors)?,在這里需要注意的是,與“異常處理”有關(guān)的中間件,一定要盡早添加,這樣,它可以最大限度的捕獲后續(xù)中間件拋出的未處理異常。感興趣的朋友跟隨小編一起看看吧2021-11-11aspx文件格式使用URLRewriter實(shí)現(xiàn)靜態(tài)化變成html
如何隱藏aspx文件格式,變成html,使用asp.net 開發(fā)的網(wǎng)頁程序,使用URLRewriter.dll 實(shí)現(xiàn)靜態(tài)化,接下來將介紹下具體操作步驟,感興趣的朋友可以參考下2013-04-04.net c# gif動畫如何添加圖片水印實(shí)現(xiàn)思路及代碼
本文將詳細(xì)介紹下c#實(shí)現(xiàn)gif動畫添加圖片水印,思路很清晰,感興趣的你可以參考下哈,希望可以幫助到你2013-03-03.Net Core WebApi部署在Linux服務(wù)器上的方法
這篇文章主要介紹了.Net Core WebApi部署在Linux服務(wù)器上的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03