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

.NET Core API与Worker Service的Serilog日志无法写入Azure Application Insights求助

Azure Application Insights 日志不上报问题解决方案

1. 修正Serilog初始化顺序

你当前的Serilog初始化时机晚于Host构建,且未显式加载配置,会导致Sink配置未生效。请按以下顺序调整Program.cs代码:
在Host构建前先加载配置、初始化Serilog、启用自诊断:

// Program.cs 入口最开头执行
var configuration = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddEnvironmentVariables()
    .Build();

// 提前启用自诊断,捕获初始化阶段错误
Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg));
// 显式从配置加载Serilog规则
Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .CreateLogger();

try
{
    // 原有Host构建逻辑
    await Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration(AppConfigurationServices.Configure)
        .ConfigureLogging(LoggerServices.Configure)
        .ConfigureServices(HostServices.Configure)
        // 添加强制释放参数,确保程序退出时刷新日志缓冲区
        .UseSerilog(dispose: true)
        .RunHostAsync(options);
}
catch (Exception ex)
{
    Log.Fatal(ex, "程序启动失败");
}
finally
{
    Log.CloseAndFlush();
}

2. 补全Application Insights服务注册

仅安装NuGet包不会自动启用遥测发送,需要手动注册服务:

  • ASP.NET Core Web API项目,在ConfigureServices中添加:
services.AddApplicationInsightsTelemetry(Configuration);
  • Worker Service项目,在ConfigureServices中添加:
services.AddApplicationInsightsTelemetryWorkerService(Configuration);

3. 关闭采样规则验证

默认的自适应采样可能会过滤掉部分测试日志,可临时关闭采样验证上报功能:
在appsettings.json的ApplicationInsights节点添加配置:

"ApplicationInsights": {
    "InstrumentationKey": "xxx-xyz",
    "EnableAdaptiveSampling": false
}

同时确认你测试的日志级别不低于Serilog中配置的restrictedToMinimumLevel(当前配置为Information,Debug、Verbose级别日志不会上报)。

4. 验证网络连通性

  • 本地调试环境:确认没有代理拦截对dc.services.visualstudio.com:443的请求
  • Azure虚拟机部署环境:检查NSG规则、Windows防火墙是否放行443端口出站请求,可执行PowerShell命令验证连通性:
Test-NetConnection dc.services.visualstudio.com -Port 443

5. 验证Application Insights资源状态

  • 确认配置的InstrumentationKey和Azure Portal中对应资源的密钥完全一致,无多余字符
  • 进入Azure Portal对应Application Insights资源的「使用情况和预估成本」页面,确认配额未耗尽,资源未被禁用。

6. 强制刷新遥测缓冲区

Application Insights SDK默认会批量上报遥测数据,测试时可主动触发刷新确认数据上报:

// 注入TelemetryClient后调用
telemetryClient.Flush();
// 等待5秒确保数据发送完成
await Task.Delay(5000);

内容的提问来源于stack exchange,提问作者Florin Vîrdol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:24:03