日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

如何在.Net6 web api中記錄每次接口請求的日志

瀏覽:41日期:2022-06-14 14:06:14
目錄為什么在軟件設(shè)計中一定要有日志系統(tǒng)?如何在.net6webapi中添加日志?1.添加日志組件2.新建SeriLogExtend擴(kuò)展類型,配置日志格式并注入3.添加RequestLoggingFilter過濾器,用以記錄每次請求的日志測試效果為什么在軟件設(shè)計中一定要有日志系統(tǒng)?

在軟件設(shè)計中日志模塊是必不可少的一部分,可以幫助開發(fā)人員更好的了解程序的運行情況,提高軟件的可靠性,安全性和性能,日志通常能幫我們解決如下問題:

調(diào)試和故障排查:日志可以記錄程序運行時的各種信息,包括錯誤,異常,警告等,方便開發(fā)人員在出現(xiàn)問題時進(jìn)行調(diào)試和故障排查。性能優(yōu)化:日志可以記錄程序的運行時間,資源占用等信息,幫助開發(fā)人員進(jìn)行性能優(yōu)化。安全審計:日志可以記錄用戶的操作行為,方便進(jìn)行安全審計和追蹤。統(tǒng)計分析:日志可以記錄用戶的訪問情況,使用習(xí)慣等信息,方便進(jìn)行統(tǒng)計分析和用戶行為研究。業(yè)務(wù)監(jiān)控:日志可以記錄業(yè)務(wù)數(shù)據(jù)的變化情況,方便進(jìn)行業(yè)務(wù)監(jiān)控和數(shù)據(jù)分析。數(shù)據(jù)還原:日志記錄每次請求的請求及響應(yīng)數(shù)據(jù),可以在數(shù)據(jù)丟失的情況下還原數(shù)據(jù)。如何在.net6webapi中添加日志?1.添加日志組件

.net6有自帶的logging組件,還有很多優(yōu)秀的開源log組件,如NLog,serilog,這里我們使用serilog組件來構(gòu)建日志模塊。

新建.net6,asp net web api項目之后,為其添加如下四個包

dotnet add package Serilog.AspNetCore//核心包dotnet add package Serilog.Formatting.Compactdotnet add Serilog.Sinks.File//提供記錄到文件dotnet add Serilog.Sinks.MSSqlServer//提供記錄到sqlserver2.新建SeriLogExtend擴(kuò)展類型,配置日志格式并注入public static class SeriLogExtend {public static void AddSerilLog(this ConfigureHostBuilder configureHostBuilder){ //輸出模板 string outputTemplate = '{NewLine}【{Level:u3}】{Timestamp:yyyy-MM-dd HH:mm:ss.fff}' + '{NewLine}#Msg#{Message:lj}' + '{NewLine}#Pro #{Properties:j}' + '{NewLine}#Exc#{Exception}' + new string('-', 50); // 配置Serilog Log.Logger = new LoggerConfiguration().MinimumLevel.Override('Microsoft', LogEventLevel.Warning) // 排除Microsoft的日志.Enrich.FromLogContext() // 注冊日志上下文.WriteTo.Console(outputTemplate: outputTemplate) // 輸出到控制臺.WriteTo.MSSqlServer('Server=.;Database=testdb;User ID=sa;Password=123;TrustServerCertificate=true', sinkOptions: GetSqlServerSinkOptions(), columnOptions: GetColumnOptions()).WriteTo.Logger(configure => configure // 輸出到文件 .MinimumLevel.Debug() .WriteTo.File( //單個日志文件,總?cè)罩?,所有日志存到這里面$'logs\\log.txt',rollingInterval: RollingInterval.Day,outputTemplate: outputTemplate) .WriteTo.File( //每天生成一個新的日志,按天來存日志'logs\\{Date}-log.txt', //定輸出到滾動日志文件中,每天會創(chuàng)建一個新的日志,按天來存日志retainedFileCountLimit: 7,outputTemplate: outputTemplate )).CreateLogger(); configureHostBuilder.UseSerilog(Log.Logger); // 注冊serilog /// <summary> /// 設(shè)置日志sqlserver配置 /// </summary> /// <returns></returns> MSSqlServerSinkOptions GetSqlServerSinkOptions() {var sqlsinkotpions = new MSSqlServerSinkOptions();sqlsinkotpions.TableName = 'sys_Serilog';//表名稱sqlsinkotpions.SchemaName = 'dbo';//數(shù)據(jù)庫模式sqlsinkotpions.AutoCreateSqlTable = true;//是否自動創(chuàng)建表return sqlsinkotpions; } /// <summary> /// 設(shè)置日志sqlserver 列配置 /// </summary> /// <returns></returns> ColumnOptions GetColumnOptions() {var customColumnOptions = new ColumnOptions();customColumnOptions.Store.Remove(StandardColumn.MessageTemplate);//刪除多余的這兩列customColumnOptions.Store.Remove(StandardColumn.Properties);var columlist = new List<SqlColumn>();columlist.Add(new SqlColumn('RequestJson', SqlDbType.NVarChar, true, 2000));//添加一列,用于記錄請求參數(shù)stringcolumlist.Add(new SqlColumn('ResponseJson', SqlDbType.NVarChar, true, 2000));//添加一列,用于記錄響應(yīng)數(shù)據(jù)customColumnOptions.AdditionalColumns = columlist;return customColumnOptions; }} }

然后再program.cs中調(diào)用這個擴(kuò)展方法

var builder = WebApplication.CreateBuilder(args);// Add services to the container.builder.Services.AddControllers(options =>{ options.Filters.Add(typeof(RequestLoggingFilter));});// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbucklebuilder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen();builder.Host.AddSerilLog();var app = builder.Build();// Configure the HTTP request pipeline.if (app.Environment.IsDevelopment()){ app.UseSwagger(); app.UseSwaggerUI();}app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();app.Run();

這里我設(shè)計的日志信息只包括了

Message:日志信息Level:等級TimeStamp:記錄日志時間Exception:異常信息RequestJson:請求參數(shù)jsonResponseJson:響應(yīng)結(jié)果json

其中前面四種為日志默認(rèn),后兩種為我主動添加,在實際的設(shè)計中還有可能有不同的信息,如:

IP:請求日志Action:請求方法Token:請求tokenUser:請求的用戶

日志的設(shè)計應(yīng)該根據(jù)實際的情況而來,其應(yīng)做到足夠詳盡,能幫助開發(fā)者定位,解決問題,而又不能過于重復(fù)臃腫,白白占用系統(tǒng)空間,我這邊的示例僅供大家參考

3.添加RequestLoggingFilter過濾器,用以記錄每次請求的日志public class RequestLoggingFilter : IActionFilter {private readonly Serilog.ILogger _logger;//注入serilogprivate Stopwatch _stopwatch;//統(tǒng)計程序耗時public RequestLoggingFilter(Serilog.ILogger logger){ _logger = logger; _stopwatch = Stopwatch.StartNew();}public void OnActionExecuted(ActionExecutedContext context){ _stopwatch.Stop(); var request = context.HttpContext.Request; var response = context.HttpContext.Response; _logger.ForContext('RequestJson',request.QueryString)//請求字符串.ForContext('ResponseJson', JsonConvert.SerializeObject(context.Result))//響應(yīng)數(shù)據(jù)json.Information('Request {Method} {Path} responded {StatusCode} in {Elapsed:0.0000} ms',//messagerequest.Method,request.Path,response.StatusCode,_stopwatch.Elapsed.TotalMilliseconds);}public void OnActionExecuting(ActionExecutingContext context){} }

在program.cs中將該過濾器添加進(jìn)所有控制器之中

builder.Services.AddControllers(options =>{ options.Filters.Add(typeof(RequestLoggingFilter));});// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbucklebuilder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen();builder.Host.AddSerilLog();var app = builder.Build();// Configure the HTTP request pipeline.if (app.Environment.IsDevelopment()){ app.UseSwagger(); app.UseSwaggerUI();}app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();app.Run();測試效果

在控制器添加一個測試方法并將其調(diào)用一次

[HttpGet]public dynamic Get123(string model){ return new { name = '123', id = 2 };}

控制臺輸出

數(shù)據(jù)庫記錄

項目根目錄下logs文件夾中日志文件記錄

到此這篇關(guān)于如何在.Net6 web api中記錄每次接口請求的日志的文章就介紹到這了,更多相關(guān).net記錄每次接口請求的日志內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: ASP.NET
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
美女国产精品久久久| 亚洲精品在线国产| 亚洲一区国产| 亚洲国产专区校园欧美| 精品五月天堂| 亚洲一二三区视频| 国产精品女主播一区二区三区| 四虎884aa成人精品最新| 精品精品99| 成人在线视频中文字幕| 国产欧美日韩在线一区二区| 亚洲三级视频| 亚洲开心激情| 日韩不卡免费视频| 日韩激情啪啪| 日韩一区中文| 久久丁香四色| 高清日韩欧美| 成人亚洲精品| 色婷婷久久久| 91精品一区二区三区综合| 亚洲不卡系列| 麻豆9191精品国产| 欧美日韩夜夜| 日韩大片在线| 日韩专区欧美专区| 国产精品久久久久久久久久久久久久久| 麻豆精品视频在线观看视频| 亚洲不卡系列| 日韩国产精品久久久久久亚洲| 欧美激情日韩| 首页国产欧美久久| 久久精品国产亚洲aⅴ| 日韩一级不卡| 久久亚洲资源中文字| 成人国产精品久久| 亚洲一区二区三区高清| 久色成人在线| 天堂久久一区| 精品国产成人| 中国女人久久久| 久久国产乱子精品免费女| 国产精品白丝久久av网站| 精品一区av| 亚洲3区在线| 波多视频一区| 欧美在线黄色| 国产综合精品| 国产精品白丝av嫩草影院| 99视频精品全部免费在线视频| 黄色成人精品网站| 国产乱码精品一区二区亚洲| 99久久久久| 国产精品久久免费视频| 午夜在线精品偷拍| 欧美国产先锋| 伊人久久亚洲| 欧美va天堂在线| 久久99精品久久久野外观看| 夜夜嗨一区二区三区| 免费一区二区三区在线视频| 免费精品视频在线| 日本美女一区| 日本午夜免费一区二区| 欧美日韩国产高清电影| 久久国产三级| 九九久久婷婷| 久久久久免费| 国产精品巨作av| 日韩和欧美的一区| 亚州av乱码久久精品蜜桃| 精品国产乱码久久久| 国产亚洲字幕| 亚洲综合小说| 欧美午夜不卡| 成人三级高清视频在线看| 国产欧美二区| 日韩avvvv在线播放| 亚洲精品极品| 国产调教精品| 日韩激情综合| 日韩中文字幕1| 午夜日韩在线| 久久午夜视频| 亚洲三级网址| 国产精品久久乐| 国产精品亚洲综合色区韩国| 青青国产91久久久久久| 亚洲欧美在线专区| 在线精品亚洲| 欧美日韩a区| 精品捆绑调教一区二区三区| 欧美成人基地| 日韩午夜一区| 亚洲精品伊人| 久久狠狠久久| 久久精品国产免费| 国产一区二区三区不卡视频网站 | 精品国产欧美日韩| 日韩欧美中文字幕一区二区三区 | 夜夜精品视频| 久久gogo国模啪啪裸体| sm久久捆绑调教精品一区| 美女毛片一区二区三区四区| 石原莉奈在线亚洲三区| 国产精品99久久免费| 视频福利一区| 日本不卡高清视频| 麻豆成人在线观看| 久久精品99久久无色码中文字幕| 91精品成人| 亚洲深夜福利在线观看| 国产探花在线精品一区二区| 黄色在线观看www| 国产女优一区| 成人日韩av| 日韩中文字幕视频网| 精品日韩视频| 国产调教精品| 只有精品亚洲| 欧洲av一区二区| 日韩1区2区日韩1区2区| 91九色精品国产一区二区| 国产欧美激情| 午夜电影一区| 亚洲精品一二三区区别| 国产欧美日韩一区二区三区四区| 日韩久久电影| 国产精品白丝一区二区三区| 蜜桃久久久久久| av一区在线| 不卡一二三区| 久久一区精品| 青草久久视频| 宅男噜噜噜66国产日韩在线观看| 亚洲激情av| 伊人成人在线视频| 久久精品国产99久久| 色综合五月天| 精品久久美女| 久久99青青| 国产亚洲精品美女久久久久久久久久| 欧美精品一线| 尤物在线精品| 亚洲少妇诱惑| 亚洲免费观看| 亚洲一区免费| 欧美不卡视频| 国产在线观看91一区二区三区| 日韩av电影一区| 久久精品99久久久| 日本色综合中文字幕| 国产精品久久| 国产一区二区三区视频在线| 国产99在线| 黄色不卡一区| 久久福利一区| 一区二区亚洲视频| 奇米狠狠一区二区三区| 日韩一区二区三区精品视频第3页| 日韩高清不卡在线| 国产免费播放一区二区| 欧美激情日韩| 一区二区小说| 日韩av在线免费观看不卡| 久久av免费看| 精品日韩视频| 日韩精品一区二区三区av | 久久亚洲在线| 午夜在线视频一区二区区别| 亚洲理论在线| 日本综合精品一区| 欧美激情视频一区二区三区在线播放| 日韩a一区二区| 欧美中文日韩| 欧美激情网址| 久久亚洲视频| 成人在线视频免费| 视频一区二区三区中文字幕| 日本视频在线一区| 极品裸体白嫩激情啪啪国产精品| 亚洲ww精品| 一区二区小说| 麻豆一区二区三区| 亚洲精品韩国| 久久精品国产99国产| 免费精品视频| 日韩成人a**站| 久久精品 人人爱| 怡红院精品视频在线观看极品| 国产精品nxnn| 欧美一区激情| 天堂俺去俺来也www久久婷婷| 在线一区视频观看| 久久丁香四色| 日本成人在线网站| 日韩午夜在线| 久久久精品久久久久久96| 国产极品一区| 日韩1区2区日韩1区2区|