Node.js 日志“丢失”通常不是真的没了,而是没写到你以为的地方、被缓冲/截断、进程异常退出或被日志库吞掉。下面按最常见原因 → 排查步骤 → 实战命令来梳理。
先问自己 3 个问题:
console.logwinston / pino / log4jspm2 logsdocker logs)现象
原因
kill -9 / 崩溃时缓冲没刷盘排查
node app.js > out.log 2>&1
对比:
node app.js | cat
解决
process.on('exit', () => {
// 不推荐,仅调试
})
典型信号
uncaughtException / unhandledRejection排查
dmesg | grep -i kill
journalctl -u your-service
加兜底
process.on('uncaughtException', e => {
console.error('FATAL', e);
process.exit(1);
});
常见坑
排查
lsof -p <pid> | grep log
正确做法
const path = require('path');
const logFile = path.resolve('/var/log/app/app.log');
winston 示例
level: 'info' // debug 没了
排查
logger.level = 'debug';
pino 注意
pino({ level: 'info' })
PM2
pm2 logs
pm2 flush # 清空了!
Docker
docker logs --tail=100 <container>
注意:
json-file 还是 nonelogrotate 截断解决
pino + pino-rollps aux | grep node
journalctl -u your-app
console.error('BOOT', Date.now());
const pino = require('pino');
const logger = pino({ level: 'debug' });
logger.info('test');
你可以贴:
我可以直接给你针对性排查命令 + 配置示例。