配置numBackups为90但PM2日志仅保留5天就丢失问题求助
日志丢失问题根因及修复方案
核心原因
你遇到的日志仅保留5天的问题由两个配置错误共同导致:
- log4js配置项错误:
- 你使用了普通
file类型的appender,该类型不支持按日期滚动归档,仅支持按文件大小滚动,pattern参数完全不生效。 numBackups参数你填了字符串类型的"90",该参数要求为数字类型,类型不匹配时log4js会自动降级使用默认值5,对应恰好只保留5份备份日志。
- 你使用了普通
- PM2启动参数与log4js冲突:
你在PM2启动命令中指定了--log log/app.log,该参数会让PM2将进程的标准输出、错误输出同时写入log/app.log文件,和log4js的日志写入目标完全一致,多进程同时写同一个文件会导致log4js的归档逻辑识别文件异常,旧日志会被错误清理。
修复步骤
- 修正log4js.json配置:将appender类型改为
dateFile,numBackups改为数字类型,示例配置如下:
{ "appenders": { "server": { "type": "dateFile", "filename": "log/app.log", "pattern": "yyyy-MM-dd", "numBackups": 90, "compress": true } }, "categories": { "default": { "appenders": [ "server" ], "level": "DEBUG" } } }
- 修改PM2启动命令,移除
--log参数,避免PM2和log4js同时写入同一个日志文件:
pm2 start server.js --name app_server --time
- 重启服务生效:先删除现有
log目录下的旧日志文件,执行pm2 delete app_server停止原有服务,再用修正后的命令启动服务即可。
补充说明
如果你需要保留PM2自身的进程日志,只需将PM2的日志输出路径和log4js的日志路径设置为不同值即可,不要共用同一个文件避免冲突。
内容的提问来源于stack exchange,提问作者user1291453
相关产品推荐
相关产品推荐

