UNPKG

env-manage-plugin

Version:

A dev env plugin that integrates an Express server with request proxying capabilities.

67 lines (66 loc) 2.56 kB
// src/utils/logger.ts import pino from "pino"; let rootLogger = null; /** * 创建根日志实例(Node.js 环境专用) * 优先级:customOptions > 默认配置 */ export const createRootLogger = (logLevel) => { if (rootLogger) return rootLogger; const level = logLevel || "info"; // 默认配置:区分开发/生产环境 const defaultConfig = { level, // 从配置读取日志级别 base: { service: "envm-service", // 服务名(多服务日志区分) // env: options.config.env || "development", // 环境标识(dev/prod/test) pid: process.pid, // Node.js 进程 ID }, // 开发环境:格式化输出(pino-pretty);生产环境:JSON 格式(便于日志收集工具解析) transport: { target: "pino-pretty", options: { colorize: true, encoding: "utf8", translateTime: "yyyy-mm-dd HH:MM:ss", hideObject: level === "info", }, }, // transport: options.config.env === "development" // ? { target: "pino-pretty", options: { colorize: true, translateTime: "yyyy-MM-dd HH:mm:ss" } } // : undefined, timestamp: pino.stdTimeFunctions.isoTime, // ISO 时间格式 redact: ["req.headers.authorization", "res.data.token"], // 敏感字段脱敏(生产环境必备) }; // 合并默认配置与自定义配置 rootLogger = pino({ ...defaultConfig }); return rootLogger; }; /** * 初始化模块级日志(单例,全局复用) * 按业务模块分类,避免日志混乱 */ export let logger; // 环境管理模块日志 export let envLogger; // 环境管理模块日志 export let devServerLogger; // 开发服务器模块日志 export let proxyLogger; // 代理模块日志 /** * Node.js 日志初始化入口(需在 config 加载后调用) */ export const initLoggers = (logLevel) => { const rootLog = createRootLogger(logLevel); // 为每个模块创建子日志(附加 module 标识,便于筛选) logger = rootLog.child({ module: "envm" }); envLogger = rootLog.child({ module: "env" }); devServerLogger = rootLog.child({ module: "devServer" }); proxyLogger = rootLog.child({ module: "proxy" }); }; /** * 获取根日志实例(确保已初始化) */ export const getRootLogger = () => { if (!rootLogger) throw new Error("日志未初始化,请先调用 initNodeLoggers()"); return rootLogger; };