cyberbot-next
Version:
cyberbot, 基于napcat-ts, nodejs,轻量qq机器人框架。
113 lines • 3.46 kB
JavaScript
import log4js from 'log4js';
import * as fs from 'fs';
import * as path from 'path';
const defaultLoggerConfig = {
level: 'info',
maxSize: '10m',
maxDays: 3
};
export class Logger {
logger;
config;
constructor(category = 'default', config) {
this.config = config || this.loadConfig() || defaultLoggerConfig;
this.configureLogger(category);
}
loadConfig() {
try {
const configPath = 'config.json';
if (fs.existsSync(configPath)) {
const configData = fs.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 = path.join(process.cwd(), 'logs');
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir, { recursive: true });
}
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: path.join(logDir, `${category}.log`),
maxLogSize: maxSize,
backups: this.config.maxDays,
compress: true,
compressBackups: true,
compressionLevel: 9
},
dateFile: {
type: 'dateFile',
filename: path.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;
}
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);
}
}
export const logger = new Logger('app');
//# sourceMappingURL=logger.js.map