UNPKG

@hestjs/logger

Version:

HestJS Logger - A powerful logging solution based on Pino

99 lines 3.65 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createLogger = createLogger; exports.createLoggerWithContext = createLoggerWithContext; exports.createChildLogger = createChildLogger; const pino_1 = __importDefault(require("pino")); const pino_pretty_1 = __importDefault(require("pino-pretty")); const config_1 = require("./config"); const formatters_1 = require("./formatters"); const logger_1 = require("./logger"); const serializers_1 = require("./serializers"); /** * 创建 Logger 实例 */ function createLogger(name, config) { // 合并配置:默认配置 -> 环境配置 -> 环境变量配置 -> 用户配置 const envConfig = (0, config_1.getEnvironmentConfig)(); const envVarConfig = (0, config_1.createConfigFromEnv)(); const userConfig = config || {}; // 如果提供了名称,添加到配置中 if (name) { userConfig.name = name; } const finalConfig = (0, config_1.mergeConfig)(envConfig, envVarConfig, userConfig); // 设置默认序列化器和格式化器 if (!finalConfig.serializers) { finalConfig.serializers = (0, serializers_1.getDefaultSerializers)(); } if (!finalConfig.formatters) { finalConfig.formatters = (0, formatters_1.getDefaultFormatters)(); } // 根据环境创建 logger const environment = process.env.NODE_ENV || "development"; let pinoLogger; if (environment === "development" || environment === "dev") { // 开发环境使用 pino-pretty 作为流 const stream = (0, pino_pretty_1.default)({ levelFirst: false, colorize: true, ignore: "pid,hostname,error", // 忽略重复的error字段,只显示err translateTime: "yy-mm-dd HH:MM:ss.l", messageFormat: "{msg}", customLevels: { fatal: 60, error: 50, warn: 40, info: 30, debug: 20, trace: 10, }, customColors: { 60: "bgRed", 50: "red", 40: "yellow", 30: "green", 20: "blue", 10: "gray", }, }); const pinoConfig = { name: finalConfig.name || name || "HestJS", level: finalConfig.level || "debug", serializers: finalConfig.serializers || {}, formatters: finalConfig.formatters || {}, }; pinoLogger = (0, pino_1.default)(pinoConfig, stream); } else { // 生产环境直接输出 JSON 到 stdout pinoLogger = (0, pino_1.default)({ name: finalConfig.name || "HestJS", level: finalConfig.level || "info", serializers: finalConfig.serializers || {}, formatters: finalConfig.formatters || {}, }); } // 如果有 name,创建一个 child logger 来包含 name const loggerName = name || finalConfig.name || "HestJS"; const loggerWithName = pinoLogger.child({ name: loggerName }); // 返回 HestLogger 实例 return new logger_1.HestLogger(loggerWithName); } /** * 创建带有上下文的 Logger */ function createLoggerWithContext(name, context, config) { const logger = createLogger(name, config); return logger.setContext(context); } /** * 创建子 Logger */ function createChildLogger(parent, bindings) { return parent.child(bindings); } //# sourceMappingURL=factory.js.map