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

ASP.NET Core API中Serilog按属性分Sink日志配置失效求助

Serilog按属性分Sink失效问题排查与修复

以下是导致当前配置不生效的核心问题及对应修复方案:

1. 配置文件Filter表达式语法错误

你在appsettings.json中使用了C#方法调用Matching.WithProperty('LogType', 'File')作为过滤表达式,但Serilog配置文件仅支持Serilog原生表达式语言,这种写法无法被解析。

修复:修改Filter表达式

修改File Sink的过滤规则:

"Filter": [
  {
    "Name": "ByIncluding",
    "Args": {
      "Expression": "@LogType = 'File'"
    }
  }
]

修改Seq Sink的过滤规则:

"Filter": [
  {
    "Name": "ByExcluding",
    "Args": {
      "Expression": "@LogType = 'File'"
    }
  }
]

2. 缺少表达式过滤依赖包

基于表达式的过滤功能需要Serilog.Filters.Expressions包支持,你当前的配置中未引入该包,导致过滤逻辑完全不生效。

修复:安装依赖并配置引用

  1. 安装对应版本的NuGet包:
Install-Package Serilog.Filters.Expressions -Version 2.3.0

(或使用.NET CLI:dotnet add package Serilog.Filters.Expressions --version 2.3.0)

  1. 在appsettings.json的Serilog.Using数组中添加包引用:
"Using": [ "Serilog.Exceptions", "Serilog.Filters.Expressions" ]

3. 全局日志级别限制导致Info日志被过滤

你配置的LevelSwitches默认级别为Error,而LogInfo方法使用的是Information级别日志。根据Serilog的全局级别规则,低于Error级别的日志会被直接过滤,导致Seq中看不到这类日志。

修复:调整全局级别开关

如果需要记录Information级别日志,修改LevelSwitches默认值:

"LevelSwitches": { "$controlSwitch": "Information" }

4. 初始化代码冗余优化

ReadFrom.Configuration(configuration)已经读取了appsettings中的所有Enrich配置,后续重复添加的.Enrich.FromLogContext()、.Enrich.WithExceptionDetails()属于冗余操作,可删除以避免重复配置:

修改后的初始化代码:

public static class SerilogLoggerExtension
{
    public static void Initialize(ILoggerFactory loggerFactory, IConfiguration configuration)
    {
        Log.Logger = new LoggerConfiguration()
            .ReadFrom.Configuration(configuration)
            .Enrich.WithEnvironmentUserName()
            .CreateLogger();

        loggerFactory.WithFilter(new FilterLoggerSettings
        {
            {"Trace",LogLevel.Trace },
            {"Default", LogLevel.Trace},
            {"Microsoft", LogLevel.Warning},
            {"System", LogLevel.Warning}
        })
        .AddSerilog();
    }
}

补充检查点

  • 确认BasicAuthorizeAttribute中的siteCode、url等变量已正确赋值,否则LogAuthInfo方法可能不会被触发;
  • 验证LogContext.PushProperty的using块范围正确,确保属性仅在目标日志中生效,不会污染其他日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:54:54