如何为Serilog.Sinks.Seq设置JsonSerializerOptions.DefaultIgnoreCondition忽略空值
解决Serilog.Sinks.Seq忽略空值属性的配置方法
要让Serilog输出到Seq时忽略空值属性,你需要自定义JSON格式化器并设置对应的JsonSerializerOptions,具体修改如下:
步骤1:确保引用必要的包
如果项目未引用Serilog.Formatting.Json,先通过NuGet安装:
Install-Package Serilog.Formatting.Json
或使用.NET CLI:
dotnet add package Serilog.Formatting.Json
步骤2:修改Serilog配置代码
在原有的UseSerilog配置块中,为Seq sink指定自定义的JsonFormatter,并配置DefaultIgnoreCondition为WhenWritingNull:
using System.Text.Json; using IHost host = Host.CreateDefaultBuilder(args) .ConfigureServices((context, services) => { services.AddHostedService<Worker>(); }) .UseSerilog((context, config) => { var seqUri = new Uri(context.Configuration["SeqUri"]!); var seqApiKey = context.Configuration["SeqApiKey"]!; config.MinimumLevel.Debug() .WriteTo.Seq( seqUri.AbsoluteUri, apiKey: seqApiKey, formatter: new JsonFormatter( renderMessage: true, jsonSerializerOptions: new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }) ); }) .Build(); await host.RunAsync();
关键说明
JsonFormatter的jsonSerializerOptions参数允许直接传入System.Text.Json的配置选项,DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull会让序列化器忽略值为null的属性。renderMessage: true保持默认行为,确保日志消息被渲染后输出,不需要的话可设为false。
内容的提问来源于stack exchange,提问作者Louis S. Berman
相关产品推荐
相关产品推荐

