.NET 6 ASP.NET Core中Serilog无法生成日志文件问题求助
解决Serilog未生成日志文件的问题
1. 安装文件输出所需的Serilog包
你当前仅配置了控制台输出,需要安装Serilog.Sinks.File包来支持文件日志写入:
dotnet add package Serilog.Sinks.File
2. 修正Serilog配置(Program.cs)
你的代码存在两个关键问题:一是启动日志Log.Information("Starting web application")在Logger配置前调用,会使用默认Logger而非Serilog;二是未添加文件输出的配置项。修改后的完整代码如下:
using Serilog; // 先配置Serilog Logger,再输出启动日志 Log.Logger = new LoggerConfiguration() .WriteTo.Console() // 保留控制台输出 .WriteTo.File( path: "./logs/log-.txt", // 日志文件路径,自动生成logs文件夹 rollingInterval: RollingInterval.Day, // 按天滚动生成新日志文件 retainedFileCountLimit: 7, // 保留最近7天的日志文件 outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}" // 自定义日志格式 ) .CreateLogger(); Log.Information("Starting web application"); var builder = WebApplication.CreateBuilder(args); // 注册服务 builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // 让ASP.NET Core使用Serilog替换默认日志系统 builder.Host.UseSerilog(); var app = builder.Build(); // 配置HTTP请求管道 if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); // 启动应用并确保日志资源正确释放 try { app.Run(); Log.Information("Application stopped successfully"); } catch (Exception ex) { Log.Fatal(ex, "Application crashed unexpectedly"); } finally { Log.CloseAndFlush(); }
3. 验证日志文件生成
启动应用后,访问/api/User/test触发日志输出,你会在应用根目录的logs文件夹下看到按日期命名的日志文件,文件内会包含控制台输出的Doing something...,以及应用启动、退出相关的日志内容。
额外注意事项
- 日志路径:相对路径默认指向应用工作目录,可通过
Directory.GetCurrentDirectory()确认具体位置,或直接使用绝对路径避免路径混淆。 - 权限检查:确保应用程序对日志目录有读写权限,生产环境部署时尤其需要注意。
- 日志级别:默认Serilog记录
Information及以上级别日志,若需更详细的调试日志,可在配置中添加.MinimumLevel.Debug()。
内容的提问来源于stack exchange,提问作者S k
相关产品推荐
相关产品推荐

