UNPKG

cyberbot-core

Version:

cyberbot, 基于napcat-ts, nodejs,轻量qq机器人框架。

119 lines 3.8 kB
import log4js from 'log4js'; import { existsSync, readFileSync, mkdirSync } from 'fs'; import { join } from 'path'; // 默认日志配置 const defaultLoggerConfig = { level: 'info', maxSize: '10m', maxDays: 3 }; export class Logger { constructor(category = 'default', config) { this.config = config || this.loadConfig() || defaultLoggerConfig; this.configureLogger(category); } loadConfig() { try { const configPath = 'config.json'; if (existsSync(configPath)) { const configData = readFileSync(configPath, 'utf-8'); const config = JSON.parse(configData); if (config.logger) { return config.logger; } } return null; } catch (error) { console.error('加载日志配置失败:', error); return null; } } configureLogger(category) { // 确保日志目录存在 const logDir = join(process.cwd(), 'logs'); if (!existsSync(logDir)) { mkdirSync(logDir, { recursive: true }); } // 计算最大日志大小(确保每天小于10MB) const maxSize = Math.min(this.parseSize(this.config.maxSize), 10 * 1024 * 1024); log4js.configure({ appenders: { console: { type: 'console', layout: { type: 'pattern', pattern: '%[%d{yyyy-MM-dd hh:mm:ss.SSS} %p%] %m' } }, file: { type: 'file', filename: join(logDir, `${category}.log`), maxLogSize: maxSize, backups: this.config.maxDays, compress: true, // 添加压缩选项 compressBackups: true, // 使用更高效的压缩 compressionLevel: 9 }, dateFile: { type: 'dateFile', filename: join(logDir, `${category}`), pattern: 'yyyy-MM-dd.log', keepFileExt: true, alwaysIncludePattern: true, numBackups: this.config.maxDays, // 添加压缩选项 compress: true, // 使用更高效的压缩 compressionLevel: 9 } }, categories: { default: { appenders: ['console', 'file', 'dateFile'], level: this.config.level } } }); this.logger = log4js.getLogger(category); } parseSize(size) { const units = { 'b': 1, 'k': 1024, 'm': 1024 * 1024, 'g': 1024 * 1024 * 1024 }; const match = size.match(/^(\d+)([bkmg])$/i); if (!match) { return 10 * 1024 * 1024; // 默认 10MB } const [, value, unit] = match; return parseInt(value) * (units[unit.toLowerCase()] || 1); } info(message) { this.logger.info(message); } warn(message) { this.logger.warn(message); } error(message, error) { if (error) { this.logger.error(`${message} ${error.message || error}`); } else { this.logger.error(message); } } debug(message) { this.logger.debug(message); } trace(message) { this.logger.trace(message); } } // 创建全局 logger 实例 export const logger = new Logger('cyberbot-log'); //# sourceMappingURL=logger.js.map