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

如何控制.Net 5 Web API中Serilog的日志输出内容?

问题

在.Net 5 Web API项目中使用Serilog实现日志记录,功能运行正常,但日志文件生成了大量非必要的额外信息(如System.Net.Http相关的HTTP请求处理日志),仅需记录指定的业务日志,如何控制Serilog的日志输出范围?

日志文件内容示例

2022-08-19T11:18:48.4609958-07:00 [Information] () Application Starting.##############3
2022-08-19T11:19:25.0417644-07:00 [Information] (LAFitness.SpotReservation.WebAPI.Queries.Query) GraphQL would be calling the following URL: https://localhost:5001/
2022-08-19T11:19:25.0695842-07:00 [Information] (System.Net.Http.HttpClient.GraphQLService.LogicalHandler) Start processing HTTP request "GET" https://localhost:5001/rooms/89
2022-08-19T11:19:25.0714494-07:00 [Information] (System.Net.Http.HttpClient.GraphQLService.ClientHandler) Sending HTTP request "GET" https://localhost:5001/rooms/89
2022-08-19T11:19:27.6939187-07:00 [Information] (System.Net.Http.HttpClient.GraphQLService.ClientHandler) Received HTTP response headers after 2616.3589ms - 200
2022-08-19T11:19:27.6956126-07:00 [Information] (System.Net.Http.HttpClient.GraphQLService.LogicalHandler) End processing HTTP request after 2633.29ms - 200

当前appsettings.json中的Serilog配置

"Serilog": {
  "MinimumLevel": "Information",
  "WriteTo": [
    {
      "Name": "File",
      "Args": {
        "path": "Logs/applog_.log",
        "outputTemplate": "{Timestamp:o} [{Level}] ({SourceContext}) {Message}{NewLine}{Exception}",
        "rollingInterval": "Day",
        "retainedFileCountLimit": 30
      }
    }
  ],
  "Filter": [
    {
      "Name": "ByExcluding",
      "Args": {
        "expression": "StartsWith(SourceContext, 'Microsoft.')"
      }
    }
  ]
}

解决方案

有三种核心方式可以精准控制Serilog的日志输出范围,保留业务日志:

1. 扩展过滤规则,排除System开头的日志

当前配置仅排除了Microsoft.开头的日志,冗余的HTTP日志来自System.Net.Http命名空间。只需修改Filter表达式,同时排除Microsoft.和System.开头的日志:

修改后的Serilog配置:

"Serilog": {
  "MinimumLevel": "Information",
  "WriteTo": [
    {
      "Name": "File",
      "Args": {
        "path": "Logs/applog_.log",
        "outputTemplate": "{Timestamp:o} [{Level}] ({SourceContext}) {Message}{NewLine}{Exception}",
        "rollingInterval": "Day",
        "retainedFileCountLimit": 30
      }
    }
  ],
  "Filter": [
    {
      "Name": "ByExcluding",
      "Args": {
        "expression": "StartsWith(SourceContext, 'Microsoft.') or StartsWith(SourceContext, 'System.')"
      }
    }
  ]
}

2. 仅包含业务命名空间的日志(最精准)

如果业务日志都来自特定命名空间(比如示例中的LAFitness.SpotReservation.WebAPI),可以改用ByIncludingOnly规则,只保留符合条件的日志,彻底过滤所有非业务日志:

修改后的配置:

"Serilog": {
  "MinimumLevel": "Information",
  "WriteTo": [
    {
      "Name": "File",
      "Args": {
        "path": "Logs/applog_.log",
        "outputTemplate": "{Timestamp:o} [{Level}] ({SourceContext}) {Message}{NewLine}{Exception}",
        "rollingInterval": "Day",
        "retainedFileCountLimit": 30
      }
    }
  ],
  "Filter": [
    {
      "Name": "ByIncludingOnly",
      "Args": {
        "expression": "StartsWith(SourceContext, 'LAFitness.SpotReservation.WebAPI')"
      }
    }
  ]
}

3. 单独调整HttpClient的日志级别

如果需要保留部分HttpClient日志但减少冗余,可以单独设置System.Net.Http的最低日志级别为Warning或更高,仅记录警告及以上级别的相关日志:

"Serilog": {
  "MinimumLevel": {
    "Default": "Information",
    "Override": {
      "System.Net.Http": "Warning"
    }
  },
  "WriteTo": [
    {
      "Name": "File",
      "Args": {
        "path": "Logs/applog_.log",
        "outputTemplate": "{Timestamp:o} [{Level}] ({SourceContext}) {Message}{NewLine}{Exception}",
        "rollingInterval": "Day",
        "retainedFileCountLimit": 30
      }
    }
  ],
  "Filter": [
    {
      "Name": "ByExcluding",
      "Args": {
        "expression": "StartsWith(SourceContext, 'Microsoft.')"
      }
    }
  ]
}

内容的提问来源于stack exchange,提问作者shujaat siddiqui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:36:16