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

.NET控制台程序配置Application Insights日志无数据显示求助

解决Azure Application Insights日志无数据显示问题

针对你的控制台程序日志无法在Application Insights中显示的问题,结合你提供的代码,给出以下关键修复方案:

1. 修正日志筛选器配置

你当前配置的日志筛选器目标类别是"Category",但实际获取的ILogger<Program>的类别为Program,导致日志被过滤。需修改筛选规则匹配实际logger类别:

services.AddLogging(loggingBuilder => 
    loggingBuilder.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>(
        typeof(Program).FullName, 
        LogLevel.Information));

如果需要允许所有类别Info及以上级别日志,可简化为:

services.AddLogging(loggingBuilder => 
    loggingBuilder.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>(
        "", 
        LogLevel.Information));

2. 处理程序生命周期,确保日志发送完成

控制台程序执行结束后会立即退出,而Application Insights日志发送为异步操作,可能未完成发送程序就终止。可通过两种方式解决:

  • 临时测试场景:在程序结束前等待日志发送完成
    var telemetryClient = serviceProvider.GetRequiredService<TelemetryClient>();
    logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
    telemetryClient.Flush();
    Task.Delay(5000).Wait(); // 等待5秒确保发送完成,生产环境可调整时长
    
  • 长期运行场景:使用Host管理生命周期(推荐)
    基于官方Worker Service的Host模式会自动处理Telemetry生命周期,无需手动Flush:
    var host = Host.CreateDefaultBuilder(args)
        .ConfigureServices(services =>
        {
            services.AddApplicationInsightsTelemetryWorkerService(options => 
                options.ConnectionString = "你的连接字符串");
            services.AddLogging(loggingBuilder => 
                loggingBuilder.AddFilter<ApplicationInsightsLoggerProvider>(
                    typeof(Program).FullName, 
                    LogLevel.Information));
            services.AddTransient<YourBusinessService>();
        })
        .Build();
    
    var businessService = host.Services.GetRequiredService<YourBusinessService>();
    businessService.Execute();
    
    await host.RunAsync();
    

3. 正确传递Logger到后续方法

推荐通过构造函数注入传递Logger到业务类,充分利用依赖注入优势:

public class YourBusinessService
{
    private readonly ILogger<YourBusinessService> _logger;

    public YourBusinessService(ILogger<YourBusinessService> logger)
    {
        _logger = logger;
    }

    public void Execute()
    {
        _logger.LogInformation("业务方法执行时间:{time}", DateTimeOffset.Now);
    }
}

若需手动传递,直接将获取到的ILogger<Program>作为参数传入方法即可:

// Main方法中调用
RunBusinessLogic(logger);

// 后续业务方法
static void RunBusinessLogic(ILogger logger)
{
    logger.LogInformation("业务逻辑执行中:{time}", DateTimeOffset.Now);
}

额外检查项

  • 确认连接字符串替换为Azure Application Insights实例的有效值
  • 在Azure Portal中检查日志查询的时间范围,确保覆盖程序运行时段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 19:27:20