UNPKG

cerevox

Version:

TypeScript SDK for browser automation and secure command execution in highly available and scalable micro computer environments

127 lines 4.25 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createClassLogger = exports.createChildLogger = exports.log = exports.logger = void 0; const pino_1 = __importDefault(require("pino")); const fs_1 = require("fs"); const path_1 = require("path"); const fs_2 = require("fs"); // 环境变量检测 const isDevelopment = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === undefined; const isProduction = process.env.NODE_ENV === 'production'; // 日志目录配置 const LOG_DIR = process.env.LOG_DIR || (0, path_1.join)(process.cwd(), 'logs'); // 确保日志目录存在 if (isProduction && !(0, fs_2.existsSync)(LOG_DIR)) { (0, fs_2.mkdirSync)(LOG_DIR, { recursive: true }); } // 开发环境配置 const developmentConfig = { level: 'debug', transport: { target: 'pino-pretty', options: { colorize: true, translateTime: 'yyyy-mm-dd HH:MM:ss', ignore: 'pid,hostname,module,version', singleLine: false, hideObject: true, messageFormat: '[{class}] {level}: {msg}', }, }, }; // 生产环境配置 const productionConfig = { level: 'info', formatters: { level: label => { return { level: label }; }, }, timestamp: pino_1.default.stdTimeFunctions.isoTime, base: { pid: process.pid, hostname: require('os').hostname(), }, }; // 创建日志流(仅生产环境) const createLogStreams = () => { if (!isProduction) return undefined; const today = new Date().toISOString().split('T')[0]; const logFile = (0, path_1.join)(LOG_DIR, `app-${today}.log`); const errorLogFile = (0, path_1.join)(LOG_DIR, `error-${today}.log`); return { info: (0, fs_1.createWriteStream)(logFile, { flags: 'a' }), error: (0, fs_1.createWriteStream)(errorLogFile, { flags: 'a' }), }; }; // 创建logger实例 const createLogger = () => { if (isDevelopment) { return (0, pino_1.default)(developmentConfig); } if (isProduction) { const streams = createLogStreams(); return (0, pino_1.default)(productionConfig, pino_1.default.multistream([ // 文件输出(不输出到控制台) ...(streams ? [ { stream: streams.info, level: 'info' }, { stream: streams.error, level: 'error' }, ] : []), ])); } // 默认配置 return (0, pino_1.default)(developmentConfig); }; // 导出logger实例 exports.logger = createLogger(); // 导出便捷方法 exports.log = { debug: (message, ...args) => exports.logger.debug(message, ...args), info: (message, ...args) => exports.logger.info(message, ...args), warn: (message, ...args) => exports.logger.warn(message, ...args), error: (message, ...args) => { if (message instanceof Error) { exports.logger.error({ err: message }, message.message, ...args); } else { exports.logger.error(message, ...args); } }, fatal: (message, ...args) => { if (message instanceof Error) { exports.logger.fatal({ err: message }, message.message, ...args); } else { exports.logger.fatal(message, ...args); } }, }; // 导出子logger创建函数 const createChildLogger = (bindings) => { return exports.logger.child(bindings); }; exports.createChildLogger = createChildLogger; // 为类创建专用logger的函数 const createClassLogger = (className, additionalBindings, logLevel) => { const bindings = { class: className, module: 'core', ...additionalBindings, }; const childLogger = exports.logger.child(bindings); // 如果指定了日志级别,设置该logger的级别 if (logLevel) { childLogger.level = logLevel; } return childLogger; }; exports.createClassLogger = createClassLogger; // 默认导出 exports.default = exports.logger; //# sourceMappingURL=logger.js.map