日志策略
AgileLabs Framework 默认使用 Serilog。日志体系分为两部分:
- Bootstrap Logger:由
AppBootstrapper创建,负责记录宿主启动到 DI 建立前的日志。 - 常规 Logger:通过
UseSerilog、services.AddSerilog()注入,覆盖应用运行期。
启用与配置
await AgileLabApplication.StartApplicationAsync(options =>
{
options.BootstrapLoggerConfiguration = logger =>
{
logger.MinimumLevel.Debug();
logger.WriteTo.Console();
};
options.ConfigureLoggingBuilder = (builder, context) =>
{
builder.AddConsole();
};
});
AgileLabs.Logging.SerilogConfigureExtensions.ConfigureSerilog会根据IHostEnvironment和IConfiguration自动加载配置。- 开发环境默认把
LoggingLevelControl.LevelSwitch.MinimumLevel设置为Debug。 BootstrapLoggerConfiguration影响启动期 Bootstrap Logger,适合补启动早期 Sink。ConfigureLoggingBuilder影响 ASP.NET Core Logging Builder,适合追加或替换运行期 Provider。UseSerilogProvider = true时框架会注册默认 Serilog Provider;设为false后需要项目自己保证运行期日志 Provider。ConfigureSerilogConfiguration是项目级 Serilog 配置入口,适合补运行期 Serilog 行为。
环境变量
| 变量 | 说明 |
|---|---|
LOG_MINI_LEVEL |
强制覆盖最小日志级别(如 Information、Warning)。 |
LOG_FILE |
当值为 true 或在 Windows 上运行时,会在 app_data/applog/{yyyyMMdd}_{MachineName} 写入滚动日志。 |
AG_APP_DATA |
自定义 app_data 路径,影响日志目录。 |
注意区分 bootlog 和运行期 applog:bootlog 来自 AppBootstrapper.SafeStartAsync,用于启动阶段;运行期 applog 来自常规 Serilog/Logging 配置,用于请求、Job 和业务代码。
结构化日志
- 默认输出模板包含
TraceId、SpanId,便于与 WorkContext/Activity 对齐。 - 推荐在业务代码中使用
ILogger<T>注入,避免直接依赖 Serilog 静态 API。
常见问题
- 日志量过大:使用
LoggingLevelControl.LevelSwitch.MinimumLevel = LogEventLevel.Warning;动态调节。 - 需要额外 Sink:在
BootstrapLoggerConfiguration或ConfigureLoggingBuilder中添加WriteTo.Seq()、WriteTo.Elasticsearch()等。 - 与 ASP.NET Core 默认日志并存:
UseSerilogProvider = true时自动替换默认 Provider;如需并存,可设置为false并手动注册 Provider。
延伸阅读: