Node.js在CentOS上日志丢失的情况可能由多个因素导致,包括日志未正确写入、日志文件被清理、进程崩溃或日志管理机制影响等。你可以按照以下步骤进行排查和解决:
1. 确保日志正确输出
①检查日志路径
如果你的应用使用 console.log() 输出日志,确保启动 Node.js 时正确重定向了日志输出。例如:
node app.js > app.log 2>&1 &
或者使用 tee 进行日志存储:
node app.js 2>&1 | tee -a app.log &
如果日志未写入,检查 app.log 文件的权限:
ls -lah app.log
确保日志文件有写入权限,必要时执行:
chmod 644 app.log
②使用 pm2 进程管理
如果你使用 pm2 运行 Node.js,日志默认存储在 ~/.pm2/logs/ 目录,可查看:
pm2 logs
如果日志未显示,可能是 pm2 日志轮转导致,可以设置日志保留:
pm2 set pm2:log_date_format "YYYY-MM-DD HH:mm:ss"
pm2 set pm2:log_max_size "10M"
pm2 save
2. 检查日志轮转与系统清理
①检查 logrotate
CentOS 可能启用了 logrotate,导致日志被自动清理。查看 /etc/logrotate.d/ 目录是否有影响日志的规则:
cat /etc/logrotate.d/your_app_log
可以修改 logrotate 配置,如:
/var/log/app.log {
daily
missingok
rotate 7
compress
notifempty
create 0644 root root
}
然后重启 logrotate:
systemctl restart logrotate
②检查 tmp 清理
如果日志存储在 /tmp 目录,CentOS 可能会定期清理此目录。可改用 /var/log/ 目录存储日志。
3. 检查 Node.js 进程崩溃
如果应用异常退出,日志可能丢失:
- 运行 dmesg | grep node 检查是否有 OOM (内存溢出)。
- 使用 pm2 restart all 确保应用稳定运行。
如果是 systemd 启动的应用,使用 journalctl -u your_app.service 查看日志。