import log4js from 'log4js' // ── 日志目录(相对于进程工作目录,PM2 启动时建议设置 cwd 为 module/server) ── const LOG_DIR = process.env.LOG_DIR || 'logs' const LOG_LEVEL = process.env.LOG_LEVEL || 'info' /** * log4js 配置: * - console : 控制台彩色输出(开发期友好) * - file : logs/app.log —— 所有 ≥ info 的日志,按天轮转,保留 30 天 * - error : logs/error.log —— 仅 warn/error,按天轮转,保留 60 天 * * 生产环境可通过环境变量控制: * LOG_DIR 日志目录 默认 logs * LOG_LEVEL 日志级别 默认 info */ export const configure = { appenders: { // 控制台 console: { type: 'console', layout: { type: 'pattern', pattern: '%[[%d{hh:mm:ss}] [%p] [%c]%] %m', }, }, // 全量文件日志(按日期轮转) file: { type: 'dateFile', filename: `${LOG_DIR}/app`, pattern: '.yyyy-MM-dd.log', alwaysIncludePattern: true, layout: { type: 'pattern', pattern: '[%d{yyyy-MM-dd hh:mm:ss}] [%p] [%c] %m', }, numBackups: 30, // 保留最近 30 天 compress: true, // 压缩旧日志 keepFileExt: false, }, // 错误日志(仅 WARN / ERROR) errorFile: { type: 'dateFile', filename: `${LOG_DIR}/error`, pattern: '.yyyy-MM-dd.log', alwaysIncludePattern: true, layout: { type: 'pattern', pattern: '[%d{yyyy-MM-dd hh:mm:ss}] [%p] [%c] %m', }, numBackups: 60, // 保留 60 天 compress: true, }, // 过滤器:只让 WARN 及以上进入 errorFile errorFilter: { type: 'logLevelFilter', appender: 'errorFile', level: 'warn', }, }, categories: { // 开发模式:只输出到控制台 default: { appenders: process.env.NODE_ENV === 'production' ? ['console', 'file', 'errorFilter'] : ['console'], level: LOG_LEVEL, }, // MySQL 日志独立分类(可在需要时调整级别) mysql: { appenders: process.env.NODE_ENV === 'production' ? ['file', 'errorFilter'] : ['console'], level: 'warn', // MySQL 日志默认只记录 warn 及以上 }, }, } log4js.configure(configure) export const manager = log4js export const mysql = log4js.getLogger('mysql') export const koa = log4js.getLogger('koa')