aspcore 请求日志 最佳实践

请求日志

记录请求日志有助于故障排查、性能监控、安全审计、用户行为分析、合规性保障及数据分析,能够快速定位问题、优化系统性能、检测安全威胁、了解用户需求,并支持决策制定,确保系统的稳定性和安全性。

常见参数

请求日志一般需要记录以下参数:请求时间、请求方法(GET/POST等)、请求URL、客户端IP地址、用户代理信息、请求头、请求体(如适用)、响应状态码、响应时间、处理时间、用户ID(如适用)以及错误信息(如有)。这些参数有助于全面分析请求情况和系统性能。

参数描述
请求方法HTTP方法(如GET/POST等)
请求URL请求的资源路径
请求体请求的主体内容(如适用)
响应状态码服务器返回的HTTP状态码
响应体响应的主体内容(如适用)
处理时间请求处理所花费的时间

成熟框架

serilog-request-logging

serilog-request-logging用于HTTP请求日志记录的中间件。

ASP.NET Core默认的请求日志记录非常冗杂,每个请求会发出多个事件。所包含的中间件将这些事件浓缩为一个单一事件,携带方法、路径、状态码和时间信息。

JSON格式表示:

{
  "@t": "2019-06-26T06:05:54.6881162Z",
  "@mt": "HTTP {RequestMethod} {RequestPath} responded {StatusCode} in {Elapsed:0.0000} ms",
  "@r": ["224.5185"],
  "@tr": "a964e1ecfc989fc7256359d3645a63dc",
  "@sp": "59d5e2250cc4a361",
  "RequestMethod": "GET",
  "RequestPath": "/",
  "StatusCode": 200,
  "Elapsed": 224.5185,
  "RequestId": "0HLNPVG1HI42T:00000001",
  "CorrelationId": null,
  "ConnectionId": "0HLNPVG1HI42T"
}
  • 请求方法
  • 请求URL
  • 请求体
  • 响应状态码
  • 响应体
  • 处理时间

使用方式:

var app = builder.Build();
app.UseSerilogRequestLogging(); // <-- Add this line

ASP.NET Core 中的 HTTP 日志记录

HTTP 日志记录是一种中间件,用于记录传入 HTTP 请求和 HTTP 响应的相关信息。 HTTP 日志记录可以记录:

  • HTTP 请求信息
  • 公共属性
  • 标头
  • 正文
  • HTTP 响应信息

HTTP 日志记录可以:

  • 记录所有请求和响应,或者仅记录满足特定条件的请求和响应。
  • 选择要记录请求和响应的哪些部分。
  • 支持修订日志中的敏感信息。

HTTP 日志记录可能会降低应用的性能,尤其是在记录请求和响应正文时。 在选择要记录的字段时请考虑性能影响。 测试所选日志记录属性的性能影响。

JSON格式表示:

{
  "@t": "2024-06-22T11:26:36.9058713Z",
  "@m": "Request and Response:RequestBody: {\"Msg\":\"World\"}\nRequestBodyStatus: [Completed]\nResponseBody: {\"msg\":\"helloWorld\"}",
  "@i": "8b8e65b7",
  "@l": "Information",
  "@tr": "a964e1ecfc989fc7256359d3645a63dc",
  "@sp": "59d5e2250cc4a361",
  "RequestBody": "{\"Msg\":\"World\"}",
  "RequestBodyStatus": "[Completed]",
  "ResponseBody": "{\"msg\":\"helloWorld\"}",
  "EventId": {
    "Id": 9,
    "Name": "RequestResponseLog"
  },
  "SourceContext": "Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware",
  "RequestId": "0HN4ILOMR3NSH:00000001",
  "RequestPath": "/message",
  "ConnectionId": "0HN4ILOMR3NSH"
}
  • 请求方法
  • 请求URL
  • 请求体
  • 响应状态码
  • 响应体
  • 处理时间

使用方式:

var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog();
builder.Services.AddHttpLogging(logging =>
{
    logging.LoggingFields = HttpLoggingFields.RequestBody | HttpLoggingFields.ResponseBody;
    logging.RequestBodyLogLimit = 1024;
    logging.ResponseBodyLogLimit = 1024;
    logging.CombineLogs = true;
});

var app = builder.Build();
app.UseHttpLogging();

总结

综合两种框架的优势和不足,构建出最佳实践,建议使用Serilog进行结构化日志记录,同时利用ASP.NET Core内置功能捕获全面请求详情,确保关键信息记录且性能影响最小化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值