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

ASP.NET Core 6 Minimal API中Serilog无法写入ASP.NET日志到文本文件

解决ASP.NET Core 6 Minimal API Serilog不写入系统日志到文件的问题

问题出在你仅创建了Serilog日志实例,但未将其关联到ASP.NET Core的日志系统,导致ASP.NET的系统日志仍使用默认控制台输出,不会通过Serilog的文件Sink写入。

修复步骤

1. 安装必要NuGet包

确保已安装Serilog.AspNetCore(整合ASP.NET Core与Serilog的核心包):

dotnet add package Serilog.AspNetCore

2. 修改Program.cs代码

调整代码,将Serilog设置为ASP.NET主机的默认日志提供器:

var configuration = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json")
    .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true)
    .Build();

// 初始化Serilog全局日志实例
Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .CreateLogger();

try
{
    var builder = WebApplication.CreateBuilder(args);
    // 关键:将Serilog设置为主机的日志提供器
    builder.Host.UseSerilog();

    // 你的Minimal API配置(添加服务、路由等)
    var app = builder.Build();

    // 自定义日志测试
    Log.Information("Prueba");

    app.Run();
}
catch (Exception ex)
{
    Log.Fatal(ex, "主机启动失败");
}
finally
{
    Log.CloseAndFlush();
}

3. 验证配置

确保appsettings.json中的Serilog配置完整(你当前的配置已经满足基本要求):

"Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": { "path": "Logs/log.txt" }
      }
    ]
}

原理说明

builder.Host.UseSerilog()会替换ASP.NET Core默认的日志框架,让所有日志(包括ASP.NET系统日志、gRPC路由日志、主机启动日志等)都通过Serilog处理,从而触发配置中定义的File Sink,将所有日志写入指定文件。

内容的提问来源于stack exchange,提问作者Álvaro García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:09:17