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
相关产品推荐
相关产品推荐

