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

Serilog无法读取appsettings.json配置且不输出微软框架日志如何解决

问题原因及解决步骤

1. 核心原因说明

你当前的配置缺少两个关键环节:

  • Serilog的全局过滤规则中,Microsoft命名空间的日志级别设置过高,微软框架内部的运行日志(如EF Core SQL输出、请求处理日志等)大多为Debug/Verbose级别,你设置为Information自然无法输出
  • 需确保微软官方的ILogger接口输出已经正确桥接到Serilog的日志管道

2. 分步调整方案

  • 第一步:检查依赖包完整性
    确保项目已安装以下NuGet包(控制台应用场景):

    • Serilog.Extensions.Hosting:实现Serilog和.NET通用宿主的日志桥接
    • Serilog.Settings.Configuration:支持从appsettings.json读取Serilog配置
    • 对应你用到的Sink包:Serilog.Sinks.Console、Serilog.Sinks.File
  • 第二步:调整appsettings.json的日志级别配置
    把Microsoft命名空间的覆盖级别调低到Debug,如果不需要System命名空间的冗余日志可以单独调高:

"Serilog": {
  "MinimumLevel": {
    "Default": "Debug",
    "Override": {
      "Microsoft": "Debug",
      // 如果只需要EF Core的SQL日志,单独配置即可,不需要全局开Microsoft的Debug
      "Microsoft.EntityFrameworkCore": "Debug",
      "System": "Warning"
    }
  }
}
  • 第三步:修正通用宿主的Serilog注入配置
    调用UseSerilog时增加参数,明确将宿主内置的日志输出全部路由到Serilog:
AppHost = Host.CreateDefaultBuilder(args)
    // 增加writeToProviders: true参数,确保微软日志体系的输出全部接入Serilog
    .UseSerilog(Log.Logger, writeToProviders: true)
    .ConfigureServices((context, services) =>
    {
        // 你原有服务注册逻辑保持不变
        services.AddDbContext<TTApplicationDbContext>(options =>
        {
            options.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
        });
        services.Configure<EmailSettings>(configuration.GetSection("EmailSettings"));
        services.Configure<SftpSettings>(configuration.GetSection("FtpSettings"));
    })
    .Build();

补充说明

微软框架的所有内部日志都是通过依赖注入的ILogger<T>接口输出,只要正确配置了Serilog作为默认日志提供器,所有日志都会自动进入Serilog的输出管道,不需要额外修改微软框架的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:36:04