@ aws- blocks/ bb- logger (缩写)
结构化记录,采用一致的JSON格式、日志级别和背景元数据.
设计与模拟等价细节 : 设计
何时使用
- 您需要结构化且可查询的应用程序日志
- 您想要在您的后端显示一致的日志格式
- 您需要请求扫描的带有相关标识的日志
- 您需要不修改代码的日志级别过滤
不使用时
- 用于一段时间内的数值测量 − 使用
Metrics - 用于分发的追查请求
Tracing
快速启动
import { Scope } from '@aws-blocks/core';
import { Logger } from '@aws-blocks/bb-logger';
const scope = new Scope('my-app');
const log = new Logger(scope, 'app');
log.info('Server started', { port: 3000 });
log.warn('Slow query', { durationMs: 1500 });
log.error('Request failed', { err: new Error('timeout') });
API 密码
构造器
new Logger(scope: ScopeParent, id: string, options?: LoggingOptions)
选项 :
level最低对数水平'debug' | 'info' | 'warn' | 'error') (中文(简体) ). 默认 :'info'。 。 。 .defaultContext——每个日志条目包含字段.
日志保存不是一个 Logger 选项——它是一个计算级别设置(参见 保留 页:1.
方法
log.debug(message: string, context?: Record<string, unknown>): void
log.info(message: string, context?: Record<string, unknown>): void
log.warn(message: string, context?: Record<string, unknown>): void
log.error(message: string, context?: Record<string, unknown>): void
log.child(context: Record<string, unknown>): ChildLogger
所有日志方法都是 同步 (无需等待).
日志条目格式
每个日志条目都是写为 stdout(或错误的 stderr)的 JSON 对象 :
{
"level": "info",
"message": "User logged in",
"timestamp": "2024-01-15T10:30:00.000Z",
"logger": "app",
"userId": "user-123"
}
儿童伐木者
创建继承上下文的请求范围日志 :
const requestLog = log.child({ requestId: 'req-abc', userId: 'u-123' });
requestLog.info('Processing request');
// Output includes requestId and userId automatically
儿童可以筑巢:
const dbLog = requestLog.child({ component: 'database' });
dbLog.warn('Slow query', { table: 'users', durationMs: 500 });
日志级别
- 构造器
level选项 - 默认 :
'info'
设置水平每 Logger 通过 level 选项。 没有 LOG_LEVEL 环境
var-log level是运行时的构造-时间选择.
对象处理出错
上下文中通过的错误实例会自动提取 :
try {
await doSomething();
} catch (err) {
log.error('Operation failed', { err });
// err is serialized as { name, message, stack }
}
序列安全
记录员处理边缘案件时优雅:
- 通知参考 改为:
"[Circular]" - 大内值 → 转换为字符串
- 函数/符号 改为:
"[unserializable]" - 上下文错误 − 提取到
{ name, message, stack }
保留(生产)
记录总是在进行,保留是一个计算级设置,而不是一个 Logger
选项. 每一次计算都会捕捉到它处理器的积分到它自己的"云表"日志
组,该组带有全堆积默认保留(defaults.logRetention —— 说
在沙盒里呆一周,生产一年).
要更改保留, 设置 logRetention 在堆放层上 defaults (适用
到每个计算器的处理日志组 :
import { BlocksPresets } from '@aws-blocks/core/cdk';
import { RetentionDays } from 'aws-cdk-lib/aws-logs';
// In your aws-blocks backend, override the preset's logRetention:
defaults: { ...BlocksPresets.production, logRetention: RetentionDays.ONE_MONTH };
A 类 Logger 不再重新配置保留——计算拥有单曲,
框架拥有的处理器日志组。 按计算留存额(a) logRetention 道具
在计算时)与公共计算配置表面相接而来
这么说吧, defaults.logRetention 是保留键.
地方发展
当地 dev(npm run dev),"Logger BB:"(英语:Logger BB:
- 将结构化的 JSON 写入 stdout/ stderr (与生产相同)
- 不将日志粘入磁盘
- 不在其中创建任何文件
.bb-data/ - 保留没有局部效果( 它是一个只用云, 计算级别设置)
- 日志级别来自
Logger是因为level选项(默认)'info'(中文(简体) )
错误
import { LoggingErrors } from '@aws-blocks/bb-logger';
LoggingErrors.SerializationFailed // 'SerializationFailedException'
此错误在上下文时用作已退化日志条目中的标记 序列化失败( 不扔给消费者) .