.NET 8 Web API中Serilog File Sink配置文件过滤失效问题
解决Serilog File Sink配置文件过滤规则不生效的问题
问题原因
你当前的配置直接在File sink节点下添加Filter,不符合Serilog配置文件的语法规则。Serilog针对单个输出目标的过滤,需要通过嵌套Logger节点实现——和你硬编码时用WriteTo.Logger()包裹过滤器与File sink的逻辑完全对应。
正确的appsettings.json配置
将File sink嵌套在Logger节点内,把过滤规则应用到这个子Logger上:
"Serilog": { "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Expressions" ], "MinimumLevel": "Debug", "Enrich": [ "FromLogContext" ], "WriteTo": [ { "Name": "Logger", "Args": { "configureLogger": { "Filter": [ { "Name": "ByIncludingOnly", "Args": { "expression": "@Properties['logtype'] == 'pippo'" } } ], "WriteTo": [ { "Name": "File", "Args": { "path": "logs/log.txt", "rollingInterval": "Day", "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff}Z - {Properties:j} {SourceContext} {Level:u3} {Message:lj}{NewLine}{Exception}" } } ] } } } ] }
补充说明
- 表达式简化为
@Properties['logtype'] == 'pippo'即可,因为你是精确匹配,无需使用Contains - 确保项目已正确安装
Serilog.Expressions包,这是表达式过滤器的依赖 - Program.cs的配置读取逻辑保持不变即可:
var configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build(); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .CreateLogger(); builder.Host.UseSerilog();
内容的提问来源于stack exchange,提问作者Stefania
相关产品推荐
相关产品推荐

