Azure App Service多虚拟目录下.NET Core API应用日志失效问题咨询
解决Azure App Service虚拟目录子应用日志不生效的问题
没错,这种多虚拟目录的场景下,子应用确实需要在配置代码里添加额外的日志配置——因为虚拟目录的子应用不会自动继承主应用的Azure诊断日志输出设置,得单独做配置才能让门户的诊断日志捕获到子应用的日志内容。
核心原因
Azure App Service的诊断日志依赖应用将日志输出到特定系统目录(D:\home\LogFiles\Application),主应用的日志配置不会自动传递给虚拟目录里的子应用,所以子应用必须明确配置日志输出到这个目录,才能被门户的诊断设置识别并展示。
.NET Core 6+ 代码配置示例(Program.cs)
在子应用的Program.cs中,添加Azure诊断日志的专属配置:
var builder = WebApplication.CreateBuilder(args); // 1. 启用Azure Web App诊断日志支持 builder.Logging.AddAzureWebAppDiagnostics(); // 同时保留控制台/调试日志(可选,方便本地调试时查看) builder.Logging.AddConsole(); builder.Logging.AddDebug(); // 2. 配置日志文件存储细节(可选,可指定子应用专属目录,便于区分主/子应用日志) builder.Services.Configure<AzureFileLoggerOptions>(options => { options.FileName = "subapp-application-"; options.FileSizeLimit = 50 * 1024 * 1024; // 单日志文件最大50MB options.RetainedFileCountLimit = 5; // 保留最近5个日志文件 options.LogDirectory = @"D:\home\LogFiles\Application\MySubApp"; // 子应用独立日志目录 }); // 其他服务注册(比如接口控制器等) builder.Services.AddControllers(); var app = builder.Build(); // 中间件配置(如权限验证等) app.UseAuthorization(); app.MapControllers(); app.Run();
第三方日志框架(以Serilog为例)的配置
如果你的项目用Serilog作为日志框架,只需要添加Azure Web App的Sink即可:
// 先初始化Serilog配置 Log.Logger = new LoggerConfiguration() .WriteTo.AzureWebAppDiagnostics() // 关键:添加Azure诊断日志输出支持 .CreateLogger(); var builder = WebApplication.CreateBuilder(args); builder.Host.UseSerilog(); // 替换默认日志系统 // 其他服务配置...
额外注意事项
- 配置完成后,必须重启子应用,让新的日志配置生效。
- 在Azure门户的诊断设置中,确认已经启用了「应用日志(文件系统)」或「应用日志(Blob存储)」,并且日志级别设置正确(比如选Information及以上)。
- 可以通过门户的「日志流」功能实时查看子应用日志,快速验证配置是否生效。
内容的提问来源于stack exchange,提问作者Manu
相关产品推荐
相关产品推荐

