AppBootstrapper 引导流程
AppBootstrapper 负责创建 Bootstrap Logger、Activity、捕获异常,并在宿主启动早期提供诊断能力。
SafeStartAsync
核心入口 AppBootstrapper.SafeStartAsync(Func<ILogger, CancellationToken, Task<int>> run, ...) 会:
- 创建
BootstrapLogger(Serilog),输出启动阶段日志。 - 生成启动 Activity:
ActivitySource "AgileLabs.AppBootstrapTracing"。 - 捕获未处理异常,写入引导日志目录。
- 在 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:在SafeStartAsync、CreateHostAsync、ConfigureServices、ConfigureWebApplication等阶段打点。- 配合默认
ActivityListener,可以在日志/监控系统中还原整个启动流程。
自定义日志行为
可以在 AppBuildOptions.BootstrapLoggerConfiguration 中追加 Sink,例如推送到 Seq/Elastic:
options.BootstrapLoggerConfiguration = logger =>
{
logger.WriteTo.Console().WriteTo.Seq("http://seq:5341");
};
常见问题
- 为什么还没进入 ASP.NET Core 日志就需要 Logger?
- 启动早期(依赖注入容器尚未构建)也可能抛出异常,例如配置文件缺失、连接字符串错误。Bootstrap Logger 能提供第一手信息。
- 如何调整日志级别?
- 设置环境变量
LOG_MINI_LEVEL=Debug或直接操作LoggingLevelControl.LevelSwitch.MinimumLevel。
- 设置环境变量
- 如何定位启动卡顿?
- 结合 Activity 时间线,查看
ConfigureServices、ConfigureWebApplication是否耗时异常。
- 结合 Activity 时间线,查看
下一步:了解 AgileLabApplication 与 日志策略。