@equinor/组合-log
用于Fusion Framework应用程序的结构化、分级过滤的伐木设施.
@equinor/fusion-log 给您一个薄薄的,RxJS后置的伐木抽象,并配有现成的控制台执行和帮助从环境变量中解析日志级别. 当您需要一致的、可配置的模块日志输出时使用它 .
密钥导出
| 导出 | 仁爱 | 目的 |
|---|---|---|
ConsoleLogger | 类 | 有标题前缀和子搜索器支持的颜色编码控制台记录器. |
Logger | 摘要类 | 建自定义日志目的地时要扩展的基础类. |
ILogger | 接口 | 每个伐木工都满足了合同要求——依赖性注射. |
LogLevel | 数字 | 发热常数( E)None, (中文(简体) ), Error, (中文(简体) ), Warning, (中文(简体) ), Info, (中文(简体) ), Debug) (中文(简体) ). |
defaultLogLevel | 常数 | 启动时解决的级别 FUSION_LOG_LEVEL。 。 。 . |
resolveLogLevel | 函数 | 将字符串或数字分析为类型安全 LogLevel。 。 。 . |
快速启动
import { ConsoleLogger, LogLevel } from '@equinor/fusion-log';
const logger = new ConsoleLogger('MyApp');
logger.level = LogLevel.Debug;
logger.debug('bootstrapping modules…');
logger.info('application ready');
logger.warn('deprecated API called');
logger.error('failed to fetch config', err);
日志级别
更高的数值是更动词. 设置 logger.level 升至某一级别使该级别成为可能 及其下方所有级别。 。 。 .
| 职等 | 数值 | 何时使用 |
|---|---|---|
None | 0 个 | 禁用所有日志 . |
Error | 1个 | 操作失败了 呼叫者应该知道. |
Warning | 2个 | 有些意外需要调查. |
Info | 3个 | 例行确认(如"单元通"). |
Debug | 页:1 | 口头诊断只促进发展. |
通过环境变量配置
设定 FUSION_LOG_LEVEL 在此之前 您的捆绑者会编译代码, 这样默认的关卡会在构建时内入.
# .env
FUSION_LOG_LEVEL=4 # numeric
# or
FUSION_LOG_LEVEL=debug # case-insensitive name
[尖叫声] 确保
FUSION_LOG_LEVEL在编译生产代码之前,设置在软件包管理器的环境变量中.
分辨率规则(在模块载荷时适用一次):
- 若为
FUSION_LOG_LEVEL设置和可解析 = 使用已解析的值. - 如果解析失败
NODE_ENV === 'development'- 倒车去Debug。 。 。 . - 否则... 回到..
Error。 。 。 . - 如果变量未设为 + 默认为
Error。 。 。 .
您也可以在运行时解决一个关卡 resolveLogLevel数字 :
import { resolveLogLevel } from '@equinor/fusion-log';
const level = resolveLogLevel(process.env.MY_LOG_LEVEL ?? 'error');
logger.level = level;
子标签
创建子日志来添加组件级上下文 。 孩子的头衔被前缀为父母的头衔,除非被推翻,日志级别会被继承.
const router = logger.createSubLogger('Router');
router.debug('navigated to /dashboard');
// console output: "MyApp::Router navigated to /dashboard"
const auth = logger.createSubLogger('Auth', undefined, LogLevel.Error);
auth.info('token refreshed'); // suppressed — level is Error
自定义记录器
扩展 Logger
子类 Logger 将日志条目传送到任何目的地,同时重新使用级别过滤和RxJS可观测管道.
import { Logger, LogLevel, type ILogger } from '@equinor/fusion-log';
class RemoteLogger extends Logger {
constructor(private readonly endpoint: string) {
super();
// subscribe to the filtered stream
this.log.subscribe(({ lvl, msg }) => {
fetch(this.endpoint, {
method: 'POST',
body: JSON.stringify({ level: lvl, messages: msg }),
});
});
}
protected _createMessage(_lvl: LogLevel, ...msg: unknown[]): unknown[] {
return msg;
}
createSubLogger(title: string): ILogger {
const sub = new RemoteLogger(this.endpoint);
sub.level = this.level;
return sub;
}
}
执行 ILogger
如果你不需要RxJS管道 执行 ILogger 直接 :
import { type ILogger, LogLevel, defaultLogLevel } from '@equinor/fusion-log';
class NoopLogger implements ILogger {
level: LogLevel = defaultLogLevel;
debug() {}
info() {}
warn() {}
error() {}
createSubLogger(): ILogger {
return new NoopLogger();
}
}