diff --git a/src/BuildFlow.Host/Program.cs b/src/BuildFlow.Host/Program.cs index e79b51a..9d05154 100644 --- a/src/BuildFlow.Host/Program.cs +++ b/src/BuildFlow.Host/Program.cs @@ -32,19 +32,22 @@ builder.Configuration.AddConsul( // 默认 ConvertConsulKVPairToConfig 把 Consul key 路径(去 buildflow/ 前缀,/ 转 :)作为 IConfiguration key, // 如 buildflow/Jwt:SigningKey → 配置 Jwt:SigningKey,value 直接是密钥字符串。 options.Parser = new SimpleConfigurationParser(); - options.Optional = false; // 诊断期:强制 Consul 必须可用,暴露真实错误 + options.Optional = false; // 诊断:Consul 必须可用,暴露真实问题 options.ReloadOnChange = true; // KV 变更自动刷新 IConfiguration(热重载基础) - // 诊断期:打印 Consul 加载异常(确认后改回 Ignore) options.OnLoadException = ex => { - Console.WriteLine($"[Consul] 加载异常: {ex.Exception?.GetType().Name}: {ex.Exception?.Message}"); - Console.WriteLine($"[Consul] 堆栈: {ex.Exception?.StackTrace?.Substring(0, System.Math.Min(500, ex.Exception?.StackTrace?.Length ?? 0))}"); - ex.Ignore = false; // 不吞,让异常抛出 + // Consul 加载失败只告警不崩溃(本地开发/CI 可能无 Consul token) + Console.WriteLine($"[Consul] 加载异常(已忽略,回退本地配置): {ex.Exception?.Message}"); + ex.Ignore = true; }; }); // OTel 日志导出 var otlpEndpoint = builder.Configuration["OpenTelemetry:OtlpEndpoint"] ?? "http://localhost:4316"; + +// ★ 诊断:AddConsul 之后立即读 KV 值,确认是否进入 IConfiguration(Build 前) +Console.WriteLine($"[DIAG] AddConsul后读 PollInterval={builder.Configuration["Monitoring:Scheduler:PollIntervalSeconds"]}(999=KV生效,60=本地)"); +Console.WriteLine($"[DIAG] Jwt:SigningKey={builder.Configuration["Jwt:SigningKey"]?[..10]}..."); builder.Logging.AddOpenTelemetry(logging => { logging.AddOtlpExporter(options => options.Endpoint = new Uri(otlpEndpoint)); @@ -57,6 +60,9 @@ builder.Services.AddHostObjectAccessors(); await builder.AddApplicationAsync(); var app = builder.Build(); +// ★ 诊断:Build 后再读一次(Winton Load 在 Build 时触发) +Console.WriteLine($"[DIAG] Build后读 PollInterval={app.Configuration["Monitoring:Scheduler:PollIntervalSeconds"]}"); +Console.WriteLine($"[DIAG] Build后读 SigningKey={app.Configuration["Jwt:SigningKey"]?[..10]}..."); await app.InitializeApplicationAsync(); // 启动期数据库初始化:迁移各库 + IM MongoDB 建索引 + 种子数据(单库失败不影响其他库)