ASP.NET Core 6中Serilog配置无效,控制台无日志输出
ASP.NET Core 6 Serilog控制台无输出的解决方法
1. 确认已安装必要NuGet包
缺少依赖包是常见问题,需安装以下包:
Install-Package Serilog.AspNetCore Install-Package Serilog.Settings.Configuration Install-Package Serilog.Sinks.Console
2. 修正Program.cs中的Serilog初始化逻辑
ASP.NET Core 6采用顶级语句,必须先初始化Serilog,再创建WebApplicationBuilder,并替换默认日志系统:
using Serilog; // 加载配置文件 var config = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .Build(); // 初始化Serilog Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(config) .CreateLogger(); try { Log.Information("应用启动中"); var builder = WebApplication.CreateBuilder(args); // 关键:替换默认日志为Serilog builder.Host.UseSerilog(); // 常规服务配置 builder.Services.AddControllers(); var app = builder.Build(); // 中间件配置 app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run(); } catch (Exception ex) { Log.Fatal(ex, "应用意外终止"); } finally { Log.CloseAndFlush(); }
3. 优化appsettings.json配置(可选但推荐)
现有配置可补充Using节点明确指定控制台接收器,避免潜在加载问题:
"Serilog": { "Using": [ "Serilog.Sinks.Console" ], "MinimumLevel": { "Default": "Information", "Override": { "Microsoft.AspNetCore": "Warning", "System": "Warning" } }, "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ], "WriteTo": [ { "Name": "Console", "Args": { "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console" } } ] }
4. 验证日志输出逻辑
- 确保输出的日志级别不低于配置的
MinimumLevel.Default(即Information及以上),比如使用_logger.LogInformation("测试日志")而非LogDebug - 若测试
Microsoft.AspNetCore命名空间下的日志,因配置中Override设为Warning,仅Warning及以上级别会输出,可临时改为Information验证
内容的提问来源于stack exchange,提问作者Amentos
相关产品推荐
相关产品推荐

