2026-03-16 12:05:55 +08:00
|
|
|
|
import log4js from 'log4js'
|
2025-12-24 23:48:14 +08:00
|
|
|
|
|
2026-03-16 12:05:55 +08:00
|
|
|
|
// ── 日志目录(相对于进程工作目录,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
|
|
|
|
|
|
*/
|
2025-12-24 23:48:14 +08:00
|
|
|
|
export const configure = {
|
|
|
|
|
|
appenders: {
|
2026-03-16 12:05:55 +08:00
|
|
|
|
// 控制台
|
|
|
|
|
|
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',
|
|
|
|
|
|
},
|
2025-12-24 23:48:14 +08:00
|
|
|
|
},
|
2026-03-16 12:05:55 +08:00
|
|
|
|
|
2025-12-24 23:48:14 +08:00
|
|
|
|
categories: {
|
2026-03-16 12:05:55 +08:00
|
|
|
|
// 开发模式:只输出到控制台
|
|
|
|
|
|
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 及以上
|
|
|
|
|
|
},
|
2025-12-24 23:48:14 +08:00
|
|
|
|
},
|
|
|
|
|
|
}
|
2026-03-16 12:05:55 +08:00
|
|
|
|
|
2025-12-24 23:48:14 +08:00
|
|
|
|
log4js.configure(configure)
|
|
|
|
|
|
|
2026-03-16 12:05:55 +08:00
|
|
|
|
export const manager = log4js
|
|
|
|
|
|
export const mysql = log4js.getLogger('mysql')
|
|
|
|
|
|
export const koa = log4js.getLogger('koa')
|