using System.Text; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using StackExchange.Profiling; using StackExchange.Profiling.Storage; namespace KH.WMS.Core.Monitoring.MiniProfiler; /// /// MiniProfiler 配置 /// public static class MiniProfilerSetup { /// /// 添加 MiniProfiler 服务 /// public static IServiceCollection AddMiniProfilerCustom(this IServiceCollection services, IConfiguration configuration, IWebHostEnvironment environment) { var miniProfilerSettings = configuration.GetSection("MiniProfiler").Get(); miniProfilerSettings ??= new MiniProfilerSettings(); // 调用官方 MiniProfiler 的扩展方法 services.AddMiniProfiler(options => { options.RouteBasePath = miniProfilerSettings.RouteBasePath; options.PopupRenderPosition = RenderPosition.BottomLeft; options.PopupShowTimeWithChildren = true; // 生产环境配置 if (!miniProfilerSettings.EnableInProduction && !environment.IsDevelopment()) { options.ShouldProfile = _ => false; } else { // 开发环境或配置为启用时,分析所有请求 options.ShouldProfile = _ => true; } // 数据库优化 options.TrackConnectionOpenClose = miniProfilerSettings.TrackConnectionOpenClose; }); return services; } /// /// 使用 MiniProfiler 中间件 /// public static IApplicationBuilder UseMiniProfilerCustom(this IApplicationBuilder app) { app.UseMiniProfiler(); return app; } } /// /// MiniProfiler 配置选项 /// public class MiniProfilerSettings { /// /// 路由基础路径 /// public string RouteBasePath { get; set; } = "/profiler"; /// /// 是否在生产环境启用 /// public bool EnableInProduction { get; set; } = false; /// /// 是否跟踪数据库连接 /// public bool TrackConnectionOpenClose { get; set; } = true; /// /// 堆栈跟踪长度 /// public int StackTraceLength { get; set; } = 5; }