You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Azure Web App的Asp.Net Core日志Scope显示在Azure Analytics中?

问题:ASP.NET Core 6应用Scope日志无法同步到Azure Log Analytics

当前环境:Windows App Service、.NET Core 6.0 ASP.NET Core应用
现状:

  • 常规日志可在App Service Log Stream及Log Analytics的AppServiceAppLogs表正常显示
  • 使用BeginScope添加的结构化字段(如示例中的user: Alex)未出现在日志中

测试代码:

using (logger.BeginScope(new Dictionary<string, object> { { "user" , "Alex" } }))
{
    logger.LogInformation("Test Log");
}

已做配置(仅让Log Stream显示Scope,Log Analytics无效):

builder.Services.Configure<AzureFileLoggerOptions>(options =>
{
    options.IncludeScopes = true;
});

额外尝试:使用Serilog本地可生成规范结构化JSON日志,但Azure Log Analytics和Log Stream仍无法显示Scope字段


解决方案

1. 原生ASP.NET Core日志配置调整

AzureFileLoggerOptions仅控制本地文件日志的Scope,对Log Analytics的日志管道无效,需配置Azure Monitor相关日志提供者:

// 添加Azure Web App诊断日志支持
builder.Logging.AddAzureWebAppDiagnostics();

// 配置Blob日志(Log Analytics依赖此管道)启用Scope
builder.Services.Configure<AzureBlobLoggerOptions>(options =>
{
    options.IncludeScopes = true;
});

// 确保日志过滤规则允许Scope相关日志输出
builder.Services.Configure<LoggerFilterOptions>(options =>
{
    options.AddFilter<Microsoft.Extensions.Logging.AzureAppServices.AzureAppServicesDiagnosticsLoggerProvider>("", LogLevel.Information);
});

同时需在App Service的诊断设置中,确认日志已正确推送到Log Analytics工作区,并勾选应用日志、详细错误日志等相关类别。

2. Serilog正确配置方式

若使用Serilog,需确保对接Azure App Service日志接收器并启用Scope上下文:
先安装依赖NuGet包:

Install-Package Serilog.AspNetCore
Install-Package Serilog.Sinks.AzureAppServices

在Program.cs中配置:

var logger = new LoggerConfiguration()
    .Enrich.FromLogContext() // 启用Scope上下文 enrichment
    .WriteTo.AzureAppServices(new AzureAppServicesSinkOptions
    {
        IncludeScopes = true,
        OutputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj} {Properties}{NewLine}{Exception}"
    })
    .CreateLogger();

// 替换原生日志提供者
builder.Logging.ClearProviders();
builder.Logging.AddSerilog(logger);

补充App Service应用设置:

  • SERILOG__MINIMUMLEVEL:Information
  • ASPNETCORE_ENVIRONMENT:Production(或对应运行环境)

3. Log Analytics中提取Scope字段

Scope中的结构化数据会被序列化到Properties字段(JSON格式),需用KQL函数解析:

AppServiceAppLogs
| where Message contains "Test Log"
| extend Properties = parse_json(Properties)
| project TimeGenerated, Message, user = Properties.user

内容的提问来源于stack exchange,提问作者Bashir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:55:25