ASP.NET Core 6 Web API中Serilog子日志配置问题求助
Serilog 多Sink配置解决方案
你的核心需求是实现两个独立的日志输出:
- 数据库Sink:仅记录自定义服务代码产生的
Information及以上级别日志 - 控制台Sink:记录所有日志(包括ASP.NET Core框架自带的Microsoft命名空间日志)
之前配置的问题分析
- 第一种配置:全局
MinimumLevel.Override将Microsoft命名空间日志级别设为Error,这会直接在日志管道入口过滤掉Microsoft的Info及以下日志,导致控制台Sink即使设置了Verbose也无法输出框架日志。 - 第二种配置:全局未做命名空间过滤,导致数据库Sink会接收所有日志(包括框架日志),同时连接字符串存在笔误(
localhost01应为localhost)且反斜杠未转义,这是数据库无输出的潜在原因。
正确的appsettings.json配置
"Serilog": { "MinimumLevel": { "Default": "Verbose", // 全局最低级别,确保所有日志进入管道 "Override": { "Microsoft": "Verbose", "System": "Verbose" } }, "WriteTo": [ { "Name": "MSSqlServer", "Args": { "connectionString": "Server=localhost\\SQLEXPRESS01;Database=AuctionDb;Trusted_Connection=TRUE;Encrypt=False", "tableName": "ActivityLogs", "autoCreateSqlTable": false, "autoCreateSqlDatabase": false, "columnOptionsSection": { "customColumns": [ { "ColumnName": "UserId", "DataType": "nvarchar" }, { "ColumnName": "ItemId", "DataType": "int" } ] } }, "MinimumLevel": { "Default": "Information", // 仅记录Info及以上级别 "Override": { "Microsoft": "None", // 完全排除Microsoft命名空间日志 "System": "None" } } }, { "Name": "Console", "Args": { "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}" }, "MinimumLevel": "Verbose" // 控制台输出所有级别日志 } ] }
关键配置说明
- 全局级别设置:将全局
Default设为Verbose,并取消对Microsoft/System命名空间的全局过滤,确保所有日志能进入管道,交给各个Sink自行处理。 - 数据库Sink过滤:通过
MinimumLevel.Override将Microsoft/System命名空间的日志级别设为None,彻底排除框架日志,同时限制仅记录Information及以上级别。 - 控制台Sink设置:直接指定
MinimumLevel为Verbose,确保输出所有日志。 - 连接字符串修正:JSON中反斜杠需转义为
\\,同时修正了localhost01的笔误。
内容的提问来源于stack exchange,提问作者rockey werewolf
相关产品推荐
相关产品推荐

