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

如何使用C#读取Azure Application Insights日志以实现单元测试运行验证

C# 读取Application Insights日志实现方案(适配单元测试场景)

前置准备

你需要提前获取以下参数:

  • Application Insights对应的工作区/应用ID
  • 具备该Application Insights日志查询权限的身份凭据,推荐使用最小权限的Monitoring Reader角色的服务主体,本地调试可直接用Azure CLI/VS的Azure账户身份验证

核心实现步骤

  • 首先安装所需NuGet包:
    Install-Package Azure.Monitor.Query
    Install-Package Azure.Identity
  • 编写查询逻辑,示例代码如下:
// 引用命名空间
using Azure.Identity;
using Azure.Monitor.Query;
using Azure.Monitor.Query.Models;

public class AppInsightsLogReader
{
    private readonly LogsQueryClient _queryClient;
    private readonly string _appInsightsAppId;

    public AppInsightsLogReader(string appInsightsAppId)
    {
        _appInsightsAppId = appInsightsAppId;
        // DefaultAzureCredential会自动从环境变量、本地Azure配置、托管身份等位置读取凭据
        _queryClient = new LogsQueryClient(new DefaultAzureCredential());
    }

    public async Task<List<T>> QueryLogsAsync<T>(string kustoQuery, TimeSpan timeRange, Func<LogsTableRow, T> mapper)
    {
        var response = await _queryClient.QueryWorkspaceAsync(
            _appInsightsAppId,
            kustoQuery,
            new QueryTimeRange(timeRange));
        
        return response.Value.Table.Rows.Select(mapper).ToList();
    }
}

单元测试使用示例

你可以在单元测试中直接调用上述封装类,结合Kusto查询语句验证业务行为:

[TestClass]
public class BusinessProcessTest
{
    [TestMethod]
    public async Task Verify_Order_Creation_Log_Exists()
    {
        // 初始化日志读取器
        var logReader = new AppInsightsLogReader("你的Application Insights应用ID");
        // 构造查询语句:查询最近5分钟内生成的订单创建事件
        var query = @"customEvents
        | where name == 'OrderCreated'
        | where customDimensions.OrderId == '测试生成的订单ID'
        | limit 1";

        // 执行查询
        var results = await logReader.QueryLogsAsync(query, TimeSpan.FromMinutes(5), row => new
        {
            OrderId = row.GetString("customDimensions.OrderId"),
            Success = row.GetBoolean("customDimensions.IsSuccess")
        });

        // 断言验证:日志存在且操作成功
        Assert.AreEqual(1, results.Count);
        Assert.IsTrue(results.First().Success);
    }
}

注意事项

  • Application Insights日志存在1-5分钟的入库延迟,单元测试中如果是验证刚触发的业务行为,建议添加适当的等待重试逻辑,避免因延迟导致断言失败
  • 如果你开启了Application Insights的采样功能,需要确保测试场景下的日志不会被采样过滤,否则会出现查询不到日志的问题
  • 不要在测试代码中硬编码身份凭据,推荐用环境变量、测试配置文件等方式存储敏感信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:24:02