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

如何在入口为global.asax.cs的ASP.NET 4.8 Web应用配置Application Insights并分离日志

ASP.NET 4.8(global.asax.cs)配置Application Insights + 独立日志项目集成方案

一、Web项目配置Application Insights

先给Web项目装上必要的NuGet包,完成基础配置:

  • 安装NuGet包:Microsoft.ApplicationInsights.Web、Microsoft.Extensions.Logging、Microsoft.Extensions.Logging.ApplicationInsights
  • 配置Instrumentation Key:
    推荐在Web.config的appSettings节点里添加,方便后续修改:
    <appSettings>
      <add key="APPINSIGHTS_INSTRUMENTATIONKEY" value="你的Instrumentation Key" />
    </appSettings>
    
  • 在global.asax.cs的Application_Start方法里初始化Application Insights:
    protected void Application_Start()
    {
        // 从配置文件读取密钥并初始化
        var instrumentationKey = System.Configuration.ConfigurationManager.AppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"];
        Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = instrumentationKey;
    
        // 原有项目初始化逻辑(比如路由注册)
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
    
    装了Microsoft.ApplicationInsights.Web后,会自动收集HTTP请求、异常、数据库依赖等数据,不需要额外写代码。

二、创建独立日志类库项目

把日志逻辑抽成独立的类库,方便复用:

  1. 新建一个**.NET Framework 4.8**的类库项目
  2. 安装NuGet包:Microsoft.Extensions.Logging、Microsoft.Extensions.Logging.ApplicationInsights,开发时需要控制台日志的话,再装Microsoft.Extensions.Logging.Console
  3. 写一个日志服务封装类,统一管理LoggerFactory的创建和配置:
    using Microsoft.Extensions.Logging;
    using System;
    
    namespace YourLoggingLibrary
    {
        public static class LoggingProvider
        {
            private static ILoggerFactory _loggerFactory;
    
            // 初始化日志服务
            public static void Setup(string instrumentationKey)
            {
                _loggerFactory = LoggerFactory.Create(builder =>
                {
                    // 添加Application Insights日志提供器,配置自动收集依赖、异常
                    builder.AddApplicationInsights(instrumentationKey, options =>
                    {
                        options.TrackDependencies = true;
                        options.TrackExceptions = true;
                    });
    
                    // 开发环境可以加控制台日志,生产环境注释掉即可
                    builder.AddConsole();
                    // 设置全局最小日志级别,比如只记录Info及以上
                    builder.SetMinimumLevel(LogLevel.Information);
                });
            }
    
            // 创建指定类型的Logger实例
            public static ILogger<T> GetLogger<T>()
            {
                if (_loggerFactory == null)
                {
                    throw new InvalidOperationException("请先调用Setup方法初始化日志服务");
                }
                return _loggerFactory.CreateLogger<T>();
            }
        }
    }
    

三、Web项目集成独立日志库

  1. 在Web项目里添加对日志类库项目的引用
  2. 回到global.asax.cs的Application_Start,添加日志服务的初始化:
    protected void Application_Start()
    {
        var instrumentationKey = System.Configuration.ConfigurationManager.AppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"];
    
        // 先初始化日志服务
        YourLoggingLibrary.LoggingProvider.Setup(instrumentationKey);
        // 再初始化Application Insights的全局配置
        Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = instrumentationKey;
    
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
    
  3. 在控制器或业务类里使用日志:
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
    
        public HomeController()
        {
            _logger = YourLoggingLibrary.LoggingProvider.GetLogger<HomeController>();
        }
    
        public ActionResult Index()
        {
            _logger.LogInformation("用户访问了首页");
            try
            {
                // 业务逻辑代码
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "处理首页请求时发生异常");
            }
            return View();
        }
    }
    

四、可选:用配置文件控制日志级别

如果想通过配置文件灵活调整日志级别,可以给日志类库加Microsoft.Extensions.Configuration.Json包,修改初始化逻辑:

  1. 在Web项目里添加appsettings.json文件,设置复制到输出目录为“如果较新则复制”,内容如下:
    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "YourLoggingLibrary": "Debug"
        }
      },
      "APPINSIGHTS_INSTRUMENTATIONKEY": "你的Instrumentation Key"
    }
    
  2. 修改日志类库的Setup方法,支持读取配置:
    using Microsoft.Extensions.Configuration;
    
    public static void Setup(IConfiguration configuration)
    {
        var instrumentationKey = configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
        _loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddApplicationInsights(instrumentationKey);
            // 读取配置文件里的日志级别设置
            builder.AddConfiguration(configuration.GetSection("Logging"));
            builder.AddConsole();
        });
    }
    
  3. 在Web项目的Application_Start里初始化Configuration:
    protected void Application_Start()
    {
        var config = new ConfigurationBuilder()
            .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .Build();
    
        YourLoggingLibrary.LoggingProvider.Setup(config);
        Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = config["APPINSIGHTS_INSTRUMENTATIONKEY"];
    
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:25:04