.NET 7 Web API如何为HTTP请求日志添加调用时间戳
.NET 7 Web API 给HTTP调用日志添加日期时间的解决方法
你目前的AddHttpLogging配置只是控制日志要包含哪些HTTP内容(比如请求方法、路径等),而日期时间属于日志的元数据,是由.NET的日志框架(而非HTTP日志中间件)来控制输出的,所以不需要在AddHttpLogging里配置,只需要调整日志提供程序的格式即可,下面是两种常用的配置方式:
方式一:通过appsettings.json配置(推荐)
直接修改项目的appsettings.json文件,在Logging节点下配置日志格式,以Console日志为例:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore.HttpLogging": "Information" // 必须开启这个级别才能输出HTTP日志 }, "Console": { "FormatterOptions": { "TimestampFormat": "yyyy-MM-dd HH:mm:ss.fff ", // 自定义日期时间格式 "UseUtcTimestamp": false, // 设为true会用UTC时间,根据需求调整 "SingleLine": true, // 日志单行显示,可读性更强 "IncludeScopes": false } } } }
方式二:通过代码配置日志格式
如果需要在代码里动态调整,可以在Program.cs中添加日志提供程序的格式配置:
// 在builder.Build()之前添加 builder.Logging.AddConsole(options => { options.FormatterOptions.TimestampFormat = "yyyy-MM-dd HH:mm:ss.fff "; options.FormatterOptions.UseUtcTimestamp = false; }); // 你的原有HTTP日志配置保持不变 builder.Services.AddHttpLogging(logging => { logging.LoggingFields = HttpLoggingFields.RequestMethod | HttpLoggingFields.RequestPath | HttpLoggingFields.RequestBody | HttpLoggingFields.ResponseBody | HttpLoggingFields.ResponseStatusCode; logging.RequestBodyLogLimit = 512; logging.ResponseBodyLogLimit = 512; }); var app = builder.Build(); // 别忘了启用HTTP日志中间件,放在其他中间件前面(比如路由之前) app.UseHttpLogging(); // ...其他中间件配置 app.MapControllers(); app.Run();
注意事项
- 必须确保
Microsoft.AspNetCore.HttpLogging的日志级别设为Information或更低(比如Debug),否则HTTP日志不会输出。 - 如果使用第三方日志框架(比如Serilog、NLog),同样是在对应框架的格式模板中添加日期时间字段即可。比如Serilog的配置模板可以加入
{Timestamp:yyyy-MM-dd HH:mm:ss.fff}。
内容的提问来源于stack exchange,提问作者Federico Ruocco
相关产品推荐
相关产品推荐

