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

如何追踪ASP.NET Core应用appsettings.json配置项的运行时使用情况

ASP.NET Core 运行时配置项使用情况追踪方案

原生实现(无需额外云服务)

  • 自定义配置装饰器
    ASP.NET Core 所有配置读取操作(包括索引器取值、GetSection 调用、Options模式绑定POCO对象)都会经过IConfiguration抽象,你可以实现一个装饰器包装默认的配置实例,在每次读取配置时记录被访问的键:
    public class TrackingConfiguration : IConfiguration
    {
        private readonly IConfiguration _innerConfig;
        private readonly ConcurrentHashSet<string> _accessedKeys = new();
    
        public TrackingConfiguration(IConfiguration inner)
        {
            _innerConfig = inner;
        }
    
        public string this[string key]
        {
            get
            {
                _accessedKeys.Add(key);
                return _innerConfig[key];
            }
            set => _innerConfig[key] = value;
        }
    
        public IConfigurationSection GetSection(string key)
        {
            _accessedKeys.Add(key);
            // 这里同样要给返回的IConfigurationSection做追踪包装,覆盖子节读取、Bind绑定的场景
            return new TrackingConfigurationSection(_innerConfig.GetSection(key), _accessedKeys);
        }
    
        public IEnumerable<IConfigurationSection> GetChildren() => _innerConfig.GetChildren();
        public IChangeToken GetReloadToken() => _innerConfig.GetReloadToken();
    
        // 应用关闭时将_accessedKeys输出到日志/本地文件,和appsettings.json全量键做差集即为未使用配置
    }
    
    在Program.cs中用这个包装类替换默认注入的IConfiguration单例即可,注意要覆盖GetChildren、Bind相关的读取路径,避免遗漏Options绑定场景的配置访问记录。
  • 临时开启配置系统追踪日志
    测试环境下可以直接把Microsoft.Extensions.Configuration类别的日志级别调整为Trace,配置系统会自动输出所有被读取的配置键信息。跑全量业务流程后从日志里提取访问过的键即可,不需要写自定义代码,缺点是日志量极大,不适合生产环境长期开。

结合Azure服务的生产环境方案

  • 接入Azure App Configuration托管配置
    把原有appsettings.json里的配置全部迁移到Azure App Configuration,服务原生提供配置访问统计能力,可以直接在门户查看每个配置键的最后访问时间、访问频次,不需要额外埋点就能直接筛出长期未访问的闲置配置。迁移成本极低,只需要在配置构建流程里加AddAzureAppConfiguration()调用,原有配置读取、Options绑定的业务代码完全不需要修改。
  • 结合Application Insights做埋点追踪
    如果不想迁移配置到Azure App Configuration,可以在前面提到的自定义配置装饰器里加埋点逻辑:每次检测到配置键被访问时,通过TelemetryClient上报一条自定义事件到Application Insights,事件携带被访问的配置键名。
    上线埋点后覆盖1-2个完整业务周期(要包含定时任务、后台作业、异常分支、各环境差异化场景),就可以通过日志查询导出所有被访问过的配置键,示例查询逻辑:
    customEvents
    | where name == "ConfigKeyAccessed"
    | summarize LastAccessTime = max(timestamp), TotalAccessCount = count() by tostring(customDimensions.ConfigKey)
    | order by LastAccessTime asc
    
    把查询结果和全量配置键做对比,就能筛选出从未被访问、或者超过数月没有访问记录的闲置配置。

注意:追踪阶段一定要覆盖所有运行场景,不要只验证主流程就删除配置,避免误删冷门分支、特殊环境才会用到的配置。第一次清理建议先给疑似闲置的配置加废弃标记,观察至少一个完整发版周期无异常后再彻底删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:15:55