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

.NET Core 6中Serilog无法写入文件日志问题求助

.NET Core 6 Serilog控制器日志无输出排查方案

1. 核对Program.cs里Serilog的注册顺序

必须在builder.Build()前完成Serilog配置并替换默认日志系统,顺序错了控制器会用默认日志而非Serilog:
正确流程:

  • 先加载配置(比如读取appsettings.json)
  • 配置Serilog
  • 调用builder.Host.UseSerilog()
  • 最后执行var app = builder.Build();

2. 检查控制器的Logger注入是否正确

控制器构造函数必须注入ILogger<你的控制器类>,不能手动实例化:

public class TestController : ControllerBase
{
    private readonly ILogger<TestController> _logger;

    public TestController(ILogger<TestController> logger)
    {
        _logger = logger;
    }
}

要是自己new Logger实例,肯定用不上你配置的Serilog。

3. 检查appsettings.json的日志级别配置

确认日志级别没过滤掉你要输出的内容:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information", // 这里得设为Information及以下,不然LogInformation打不出来
      "Override": {
        "Microsoft": "Warning",
        "Microsoft.AspNetCore": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      // 你的输出目标配置
    ]
  }
}

注意Override里别把你控制器的命名空间设成了更高级别(比如Warning),不然控制器的Information日志会被过滤。

4. 确认Serilog的输出目标配置没限制级别

启动日志能输出不代表所有级别都能输出,检查WriteTo里有没有限制最低级别:
比如这种配置会只输出Error及以上,LogInformation就打不进去:

"WriteTo": [
  {
    "Name": "File",
    "Args": {
      "path": "logs/log-.txt",
      "rollingInterval": "Day",
      "restrictedToMinimumLevel": "Error"
    }
  }
]

要么把restrictedToMinimumLevel改成Information,要么加一个专门处理Information级别的输出配置。

5. 排查是否有自定义日志过滤规则

检查Program.cs里有没有加过滤控制器日志的代码,比如:

builder.Logging.AddFilter("你的项目命名空间.Controllers", LogLevel.None);

这种代码会直接屏蔽控制器的所有日志,删掉就行。

6. 修复NuGet包可能的损坏问题

虽然你装的版本和.NET Core 6兼容,但还是可以尝试清理缓存重装:

  • 删除项目下的bin、obj文件夹
  • 运行dotnet restore重新恢复包

内容的提问来源于stack exchange,提问作者Deus Ex Machina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:10:22