cerevox
Version:
TypeScript SDK for browser automation and secure command execution in highly available and scalable micro computer environments
127 lines • 4.25 kB
JavaScript
;
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