.NET 6与.NET 8中Serilog Http Sink日志格式差异问题(7.2.0+版本异常)
问题原因解析
这个格式变化并非由.NET 8升级导致,而是Serilog Http Sink 7.2.0版本引入的默认批次格式化器变更:
- 在7.2.0之前的版本,Http Sink默认使用
DefaultBatchFormatter,它会将日志批次包装在一个包含events字段的顶层对象中,输出格式类似:{"events": [{"Timestamp": "...", "Message": "...", ...}, ...]} - 从7.2.0版本开始,官方将默认的批次格式化器替换为
ArrayBatchFormatter,该格式化器会直接输出日志事件的数组,不再添加外层包装对象,也就是你现在看到的直接数组格式:[{"Timestamp": "...", "Message": "...", ...}, ...]
官方做出这个变更的目的是适配更多日志收集端点的预期格式——部分服务直接接收纯数组格式的日志数据,无需外层包装。
如果需要恢复旧版的包装格式,可在配置Http Sink时显式指定使用DefaultBatchFormatter:
代码配置示例
using Serilog; using Serilog.Sinks.Http.BatchFormatters; Log.Logger = new LoggerConfiguration() .WriteTo.Http("https://your-log-endpoint", batchFormatter: new DefaultBatchFormatter()) .CreateLogger();
配置文件(appsettings.json)示例
{ "Serilog": { "WriteTo": [ { "Name": "Http", "Args": { "requestUri": "https://your-log-endpoint", "batchFormatter": "Serilog.Sinks.Http.BatchFormatters.DefaultBatchFormatter, Serilog.Sinks.Http" } } ] } }
内容的提问来源于stack exchange,提问作者Kamran Shahid
相关产品推荐
相关产品推荐

