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

.NET 6 Razor Pages应用中Serilog对接Application Insights配置求助

解决.NET 6 Razor Pages中Serilog对接Application Insights失效问题

核心问题分析

你的问题根源有三点:

  1. 未注册Application Insights核心服务:服务容器中缺少Application Insights的Telemetry服务注册,导致TelemetryConfiguration无法通过依赖注入获取。
  2. 错误使用旧版API:TelemetryConfiguration.Active是传统API,在依赖注入环境下无法正确加载appsettings中的配置信息。
  3. 启动日志过早绑定AI Sink:BootstrapLogger阶段AI配置尚未完成,直接写入会导致日志丢失。

修正步骤

1. 确认已安装必要NuGet包

确保项目包含以下包:

  • Serilog.AspNetCore
  • Serilog.Sinks.ApplicationInsights
  • Microsoft.ApplicationInsights.AspNetCore

2. 修改Program.cs代码

using AppInsightsSerilogCustomDimensions;
using Microsoft.ApplicationInsights.Extensibility;
using Serilog;

// BootstrapLogger仅用于启动阶段日志,建议输出到控制台/文件,避免过早绑定AI
Log.Logger = new LoggerConfiguration()
    .Enrich.With<SystemInfoEnricher>()
    .WriteTo.Console()
    .CreateBootstrapLogger();

try
{
    var builder = WebApplication.CreateBuilder(args);

    // 关键:添加Application Insights核心服务,自动注册TelemetryConfiguration并读取配置
    builder.Services.AddApplicationInsightsTelemetry();

    // 添加Razor Pages服务
    builder.Services.AddRazorPages();

    // 配置Serilog,使用DI获取已初始化的TelemetryConfiguration
    builder.Host.UseSerilog((context, services, configuration) => configuration
        .ReadFrom.Configuration(context.Configuration)
        .ReadFrom.Services(services)
        .Enrich.With<SystemInfoEnricher>()
        .WriteTo.ApplicationInsights(
            services.GetRequiredService<TelemetryConfiguration>(),
            TelemetryConverter.Traces));

    var app = builder.Build();

    // 配置HTTP请求管道
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();
    app.UseAuthorization();
    app.MapRazorPages();

    app.Run();
}
catch (Exception ex)
{
    Log.Fatal(ex, "Application terminated unexpectedly");
}
finally
{
    Log.CloseAndFlush();
}

3. 简化appsettings.json配置

ConnectionString优先级高于InstrumentationKey,保留其中一个即可(推荐使用ConnectionString):

{
  "ApplicationInsights": {
    "ConnectionString": "---你的ConnectionString---"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Information"
    }
  },
  "AllowedHosts": "*"
}

4. 验证效果

  • 确认自定义Enricher逻辑无异常抛出
  • 启动应用后,在Application Insights门户的跟踪选项卡查看日志(需等待数分钟同步)

关键说明

  • AddApplicationInsightsTelemetry()会自动读取appsettings中的配置,无需手动初始化TelemetryConfiguration
  • 通过DI获取的TelemetryConfiguration能确保配置完全加载,包括自定义TelemetryInitializer
  • BootstrapLogger避免绑定AI,防止启动阶段配置未就绪导致日志丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:57:14