@hestjs/logger
Version:
HestJS Logger - A powerful logging solution based on Pino
99 lines • 3.65 kB
JavaScript
;
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