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