chore(deps): add pino logger dependency

Add pino v10.3.1 to project dependencies for structured logging support, along with its transitive dependencies (pino-abstract-transport, pino-std-serializers, quick-format-unescaped, atomic-sleep, etc.).
This commit is contained in:
2026-06-11 14:23:30 +08:00
parent 2b6d3924fd
commit d189a18f03
3 changed files with 167 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
import pino, { type Logger as PinoLogger, type LoggerOptions } from "pino";
import { isProduction, isTest } from "./app-env";
/**
* 全局 pino root logger(单例,进程级复用)。
*
* 配置驱动(基于 `app-env.ts` 的 `isProduction()` / `isTest()`):
* - production: info 级别 + JSON(机器可解析,接入日志平台)
* - test: warn 级别(减少 vitest 噪音)
* - development: debug 级别 + ISO 时间戳(人眼友好)
*/
const rootLogger: PinoLogger = pino(createLoggerOptions());
function createLoggerOptions(): LoggerOptions {
if (isProduction()) {
return { level: "info" };
}
if (isTest()) {
return { level: "warn" };
}
// development
return { level: "debug", timestamp: pino.stdTimeFunctions.isoTime };
}
/**
* Logger 工具类(pino 包装)
*
* 设计:
* - 构造时绑定 `component` 名(业务模块标识)
* - 所有日志自动带 `{ component: "AuthRepository" }` 字段
* - 透传 pino 原生 5 个 leveldebug / info / warn / error / fatal
*
* 用法:
* const log = new Logger("AuthRepository");
* log.info("login success");
* log.warn({ err }, "storage write failed");
* log.error(e, "consumer error");
* log.debug({ userId: 123 }, "fetched user");
*/
export class Logger {
private readonly logger: PinoLogger;
constructor(component: string) {
this.logger = rootLogger.child({ component });
}
debug(...args: Parameters<PinoLogger["debug"]>): void {
this.logger.debug(...args);
}
info(...args: Parameters<PinoLogger["info"]>): void {
this.logger.info(...args);
}
warn(...args: Parameters<PinoLogger["warn"]>): void {
this.logger.warn(...args);
}
error(...args: Parameters<PinoLogger["error"]>): void {
this.logger.error(...args);
}
fatal(...args: Parameters<PinoLogger["fatal"]>): void {
this.logger.fatal(...args);
}
/** 透传 raw pino logger(高级用法:自定义 binding / child / serializers */
get raw(): PinoLogger {
return this.logger;
}
}