You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:23:11