Files
ai-dimension/server/src/utils/logger.js
T
Yuzhiran Dev c1d6dd3b29 refactor: 项目架构重构 - 目录标准化 + 清理冗余
- 目录重命名: backend/wdkj-server/ → server/, frontend/ai-dimension/ → client/
- 删除 20+ 冗余文件(WDKJ 旧脚本、Windows 脚本、过时文档、设计稿)
- 更新 package.json 元数据(移除 wdkj 命名)
- 完善三级 .gitignore(根 + server + client)
- 重写 README.md 和 CHANGELOG.md
- 工具脚本移至 scripts/
2026-07-11 12:45:37 +08:00

97 lines
2.1 KiB
JavaScript
Executable File

const fs = require('fs')
const path = require('path')
/**
* 日志级别
*/
const LOG_LEVELS = {
debug: 0,
info: 1,
warn: 2,
error: 3
}
/**
* 日志器
*/
class Logger {
constructor(level = 'info', logDir = './logs') {
this.level = LOG_LEVELS[level] || LOG_LEVELS.info
this.logDir = logDir
// 确保日志目录存在
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir, { recursive: true })
}
}
/**
* 格式化日志消息
*/
formatMessage(level, message, meta = {}) {
const timestamp = new Date().toISOString()
const metaStr = Object.keys(meta).length > 0 ? JSON.stringify(meta) : ''
return `[${timestamp}] [${level.toUpperCase()}] ${message} ${metaStr}\n`
}
/**
* 写入日志文件
*/
writeToFile(level, message, meta) {
const date = new Date().toISOString().split('T')[0]
const logFile = path.join(this.logDir, `${date}.log`)
const logMessage = this.formatMessage(level, message, meta)
fs.appendFile(logFile, logMessage, (err) => {
if (err) console.error('写入日志失败:', err)
})
}
/**
* 记录日志
*/
log(level, message, meta = {}) {
if (LOG_LEVELS[level] < this.level) return
const formattedMessage = this.formatMessage(level, message, meta)
// 控制台输出
switch (level) {
case 'error':
console.error(formattedMessage.trim())
break
case 'warn':
console.warn(formattedMessage.trim())
break
default:
console.log(formattedMessage.trim())
}
// 文件输出(生产环境)
if (process.env.NODE_ENV === 'production') {
this.writeToFile(level, message, meta)
}
}
debug(message, meta) {
this.log('debug', message, meta)
}
info(message, meta) {
this.log('info', message, meta)
}
warn(message, meta) {
this.log('warn', message, meta)
}
error(message, meta) {
this.log('error', message, meta)
}
}
// 导出单例
const logger = new Logger(process.env.LOG_LEVEL || 'info')
module.exports = logger