agilelabs-fx-docs main fundamentals/bootstraper/overview.md

AppBootstrapper 引导流程

AppBootstrapper 负责创建 Bootstrap Logger、Activity、捕获异常,并在宿主启动早期提供诊断能力。

SafeStartAsync

核心入口 AppBootstrapper.SafeStartAsync(Func<ILogger, CancellationToken, Task<int>> run, ...) 会:

  1. 创建 BootstrapLogger(Serilog),输出启动阶段日志。
  2. 生成启动 Activity:ActivitySource "AgileLabs.AppBootstrapTracing"
  3. 捕获未处理异常,写入引导日志目录。
  4. 在 finally 中关闭日志、清理资源。

Bootstrap Logger

var loggerConfiguration = new LoggerConfiguration()
    .MinimumLevel.ControlledBy(LoggingLevelControl.LevelSwitch)
    .WriteTo.Console(...);
  • 默认输出模版:[{Timestamp} {TraceId} {SpanId}[{ParentId}] {Level}] {SourceContext} {Message}
  • 支持通过 AG_APP_DATA 自定义 app_data 路径,从而指定引导日志目录。
  • Windows 环境会自动开启文件日志(app_data/applog/yyyyMMdd_{MachineName}/log.txt)。

Activity 源

  • AppBootstrapper.AppBootstrapSource:在 SafeStartAsyncCreateHostAsyncConfigureServicesConfigureWebApplication 等阶段打点。
  • 配合默认 ActivityListener,可以在日志/监控系统中还原整个启动流程。

自定义日志行为

可以在 AppBuildOptions.BootstrapLoggerConfiguration 中追加 Sink,例如推送到 Seq/Elastic:

options.BootstrapLoggerConfiguration = logger =>
{
    logger.WriteTo.Console().WriteTo.Seq("http://seq:5341");
};

常见问题

  1. 为什么还没进入 ASP.NET Core 日志就需要 Logger?
    • 启动早期(依赖注入容器尚未构建)也可能抛出异常,例如配置文件缺失、连接字符串错误。Bootstrap Logger 能提供第一手信息。
  2. 如何调整日志级别?
    • 设置环境变量 LOG_MINI_LEVEL=Debug 或直接操作 LoggingLevelControl.LevelSwitch.MinimumLevel
  3. 如何定位启动卡顿?
    • 结合 Activity 时间线,查看 ConfigureServicesConfigureWebApplication 是否耗时异常。

下一步:了解 AgileLabApplication日志策略