| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- // 直接测试文件日志功能
- const fs = require('fs/promises');
- const path = require('path');
- class FileLogger {
- constructor(serviceName, logDir) {
- this.serviceName = serviceName;
- this.logDir = logDir || process.env.LOG_DIR || './log-prd';
- }
- getDateFolderPath() {
- const now = new Date();
- const year = now.getFullYear();
- const month = String(now.getMonth() + 1).padStart(2, '0');
- const day = String(now.getDate()).padStart(2, '0');
- return path.join(this.logDir, `${year}-${month}-${day}`);
- }
- getLogFilePath() {
- const dateFolder = this.getDateFolderPath();
- return path.join(dateFolder, `${this.serviceName}.log`);
- }
- async ensureLogDir() {
- const logFilePath = this.getLogFilePath();
- const logDir = path.dirname(logFilePath);
- try {
- await fs.mkdir(logDir, { recursive: true });
- } catch (error) {
- console.error(`创建日志目录失败: ${error}`);
- throw error;
- }
- }
- formatMessage(level, message, metadata) {
- const now = new Date();
- const timestamp = now.toISOString();
- const formattedMessage = `[${timestamp}] [${level.toUpperCase()}] ${message}`;
- if (metadata) {
- const metadataStr = typeof metadata === 'object'
- ? JSON.stringify(metadata, null, 2)
- : String(metadata);
- return `${formattedMessage}\n${metadataStr}\n`;
- }
- return `${formattedMessage}\n`;
- }
- async writeToFile(level, message, metadata) {
- try {
- await this.ensureLogDir();
- const logFilePath = this.getLogFilePath();
- const formattedMessage = this.formatMessage(level, message, metadata);
- await fs.appendFile(logFilePath, formattedMessage, 'utf8');
- console.log(`日志已写入: ${logFilePath}`);
- } catch (error) {
- console.error(`写入日志文件失败: ${error}`);
- // 不抛出错误,避免影响主流程
- }
- }
- async info(message, metadata) {
- console.log(`[INFO] ${message}`, metadata || '');
- await this.writeToFile('info', message, metadata);
- }
- async warn(message, metadata) {
- console.warn(`[WARN] ${message}`, metadata || '');
- await this.writeToFile('warn', message, metadata);
- }
- async error(message, metadata) {
- console.error(`[ERROR] ${message}`, metadata || '');
- await this.writeToFile('error', message, metadata);
- }
- async debug(message, metadata) {
- console.debug(`[DEBUG] ${message}`, metadata || '');
- await this.writeToFile('debug', message, metadata);
- }
- }
- function createServiceLogger(serviceName, logDir) {
- return new FileLogger(serviceName, logDir);
- }
- // 测试函数
- async function testDirectLogging() {
- console.log('开始直接测试日志功能...\n');
- // 创建日志器
- const logger = createServiceLogger('feie-print-task-service-direct-test');
- // 测试不同级别的日志
- console.log('1. 测试信息级别日志...');
- await logger.info('测试信息日志', { taskId: 'TEST_123', status: 'PENDING' });
- console.log('2. 测试警告级别日志...');
- await logger.warn('测试警告日志', { error: '打印机未连接', retryCount: 1 });
- console.log('3. 测试错误级别日志...');
- await logger.error('测试错误日志', { error: '打印失败', code: -1 });
- console.log('4. 测试调试级别日志...');
- await logger.debug('测试调试日志', { response: { ret: 0, msg: 'success' } });
- console.log('5. 测试简单消息(无元数据)...');
- await logger.info('简单日志消息');
- console.log('\n直接日志测试完成!');
- console.log('日志文件应该创建在: ./log-prd/YYYY-MM-DD/feie-print-task-service-direct-test.log');
- // 显示日志文件路径
- const logFilePath = logger.getLogFilePath();
- console.log(`完整路径: ${logFilePath}`);
- // 尝试读取并显示日志内容
- try {
- const content = await fs.readFile(logFilePath, 'utf8');
- console.log('\n=== 日志文件内容 ===');
- console.log(content);
- console.log('=== 结束 ===');
- } catch (error) {
- console.log('无法读取日志文件,可能尚未创建或权限问题');
- }
- }
- // 运行测试
- testDirectLogging().catch(error => {
- console.error('测试失败:', error);
- process.exit(1);
- });
|