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

如何在ASP.NET Core MVC中阻止Serilog记录HTTP GET请求

如何阻止Serilog自动记录HTTP GET接口调用的日志?

Serilog已成功实现日志记录,但会自动生成HTTP GET请求的日志,例如日志中存在如下记录:

2024-10-25 06:24:10.040 -04:00 [INF] HTTP GET / responded 200 in 6107.3816 ms

当前相关配置如下:

Program.cs代码

builder.Host.UseSerilog((context, configuration) =>
{
    var requestLoggingOptions = new RequestLoggingOptions();
    configuration.ReadFrom.Configuration(context.Configuration);
});

appsettings.json配置

"Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
    "MinimumLevel": {
        "Default": "Debug",
        "Override": {
            "Microsoft": "Warning", // 以Microsoft开头的日志需达到Warning级别才记录
            "Microsoft.AspNetCore": "Warning", 
            "System": "Warning", // 以System开头的日志需达到Warning级别才记录
            "System.Net.Http.HttpClient": "Warning"  // 可能因上方配置无需单独设置
        }
    },
    "WriteTo": [ ... 已省略 ...
    ],

    "Filter": [
        {
            "Name": "ByExcludingOnly",
            "Args": {
                "expression": "e.Request.Method == \"GET\"",
            }
        }
    ]
},

已尝试调整最低级别配置和过滤规则,但GET请求日志仍会生成。


解决方案

1. 修正过滤表达式(针对请求日志属性)

Serilog.AspNetCore生成的请求日志中,HTTP方法存储在RequestMethod属性中,而非e.Request.Method;同时建议使用ByExcluding替代ByExcludingOnly(后者仅在无其他规则时生效)。修改appsettings.json的Filter配置:

"Filter": [
    {
        "Name": "ByExcluding",
        "Args": {
            "expression": "RequestMethod == \"GET\""
        }
    }
]

2. 通过请求日志选项直接过滤GET请求

在Program.cs中手动配置请求日志中间件,将GET请求的日志级别设为低于你设置的最低级别(Debug),从而自动忽略:

builder.Host.UseSerilog((context, configuration) =>
{
    configuration.ReadFrom.Configuration(context.Configuration);
});

// 配置请求日志过滤规则
app.UseSerilogRequestLogging(options =>
{
    options.GetLevel = (httpContext, elapsed, ex) => 
        httpContext.Request.Method != "GET" ? LogEventLevel.Information : LogEventLevel.Verbose;
});

3. 修复JSON配置语法错误(关键!)

原appsettings.json中"System": "Warning"行后缺少逗号,导致JSON解析失败,后续的Filter配置未被加载。修正后的配置片段:

"Override": {
    "Microsoft": "Warning",
    "Microsoft.AspNetCore": "Warning", 
    "System": "Warning",
    "System.Net.Http.HttpClient": "Warning"
}

4. 可选:禁用所有请求日志(不推荐,仅需禁用GET时不用)

若要完全禁用所有HTTP请求日志,可在MinimumLevel.Override中添加:

"Serilog.AspNetCore.RequestLoggingMiddleware": "None"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:40:13