cyberbot-core
Version:
cyberbot, 基于napcat-ts, nodejs,轻量qq机器人框架。
119 lines • 3.8 kB
JavaScript
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