部署Azure后Serilog日志级别设置失效问题求助
问题:Azure App Service中.NET6应用Serilog日志级别配置不生效
我们为部署在Azure App Service中的.NET 6 Web应用配置了Serilog,日志输出至Elasticsearch。本地环境下日志级别设置可正常生效,但部署到Azure后,日志级别配置被忽略,仍会输出Information和Debug级别的日志,未遵循已配置的最低日志级别。
现有代码与配置
Program.cs
using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Serilog; using System; using System.IO; using System.Threading.Tasks; namespace MyApp { public class Program { public async static Task<int> Main(string[] args) { var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .AddEnvironmentVariables() .Build(); Serilog.Debugging.SelfLog.Enable(message => Console.WriteLine(message)); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .CreateLogger(); try { Log.Information("Starting"); await CreateHostBuilder(args).Build().RunAsync(); return 0; } catch (Exception ex) { Log.Fatal(ex, $"host terminated unexpectedly {ex}"); return 1; } finally { Log.CloseAndFlush(); } } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }) .UseSerilog(); } }
AppSettings.json中的Serilog配置
"Serilog": { "Using": ["Serilog.Sinks.Console", "Serilog.Sinks.Elasticsearch"], "MinimumLevel": { "Default": "Debug", "Override": { "Microsoft": "Warning", "System": "Warning" } }, "WriteTo": [ { "Name": "Console", "Args": { "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console", "outputTemplate": "[{Timestamp} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}" } }, { "Name": "Elasticsearch", "Args": { "nodeUris": "https://<<<ELASTICHOST>>>", "indexFormat": "logs-{0:yyyy.MM.dd}", "connectionGlobalHeaders": "Authorization=ApiKey <<<KEY>>>;", "emitEventFailure": "WriteToSelfLog", "autoRegisterTemplate": true, "registerTemplateFailure": "IndexAnyway", "autoRegisterTemplateVersion": "ESv7", "batchPostingLimit": 50, "batchAction": "Create", "period": 2, "inlineFields": true, "deadLetterIndexName": "deadletter-{0:yyyy.MM.dd}" } } ], "Enrich": ["FromLogContext"], "Properties": { "Application": "MyAzureAppServiceApp", "Environment": "Live" } }
Azure App Service应用程序设置
Serilog__MinimumLevel__Default = Warning Serilog__MinimumLevel__Override__Microsoft = Warning Serilog__MinimumLevel__Override__System = Warning

问题原因分析
当前代码中,你在Main方法中手动构建配置对象并初始化Serilog,但Host.CreateDefaultBuilder(args)会重新加载一套完整的配置源(包含命令行参数、环境变量、不同环境的appsettings文件等),两者的配置加载逻辑存在差异。此外,Azure App Service中Directory.GetCurrentDirectory()返回的路径可能并非网站根目录,导致自定义配置对象未正确加载环境变量或配置文件,最终Serilog未应用Azure上设置的日志级别。
解决方案
1. 让Host管理配置与Serilog初始化
修改Program.cs,删除手动构建配置的逻辑,改用Host.CreateDefaultBuilder提供的配置源初始化Serilog,确保Azure应用程序设置能被正确读取并覆盖本地配置:
using Microsoft.Extensions.Hosting; using Serilog; using System; using System.Threading.Tasks; namespace MyApp { public class Program { public async static Task<int> Main(string[] args) { try { var host = Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }) .UseSerilog((context, loggerConfig) => { // 使用Host的配置源初始化Serilog loggerConfig.ReadFrom.Configuration(context.Configuration) .Enrich.FromLogContext(); // 启用Serilog自日志,方便排查问题 Serilog.Debugging.SelfLog.Enable(message => Console.WriteLine(message)); }) .Build(); Log.Information("Starting application"); await host.RunAsync(); return 0; } catch (Exception ex) { Log.Fatal(ex, "Host terminated unexpectedly"); return 1; } finally { Log.CloseAndFlush(); } } } }
2. 验证Azure配置生效
- 修改Azure应用程序设置后,必须重启App Service才能确保配置生效。
- 通过Azure App Service的“日志流”查看Serilog自日志输出,确认环境变量是否被正确读取:如果配置加载正常,自日志会输出类似
Configuration loaded from ...的信息;如果有错误,也会在日志流中显示。
3. 额外检查点
- 确认Azure App Service的运行环境:如果存在
appsettings.{Environment}.json(如appsettings.Production.json),需检查其中的Serilog配置是否与应用程序设置冲突,环境特定的配置文件优先级低于环境变量。 - 验证应用程序设置的命名格式:确保使用双下划线(
__)替代JSON路径中的冒号,例如Serilog__MinimumLevel__Default是正确的格式。
内容的提问来源于stack exchange,提问作者Stuart.Sklinar
相关产品推荐
相关产品推荐

