如何在生产环境查看Node.js的console.log日志?
解决Node.js生产环境console.log日志无法查看的问题
兄弟,我之前也踩过一模一样的坑!本地跑的好好的功能到生产环境就失效,还看不到日志确实头疼。其实生产环境下Node.js的console.log不会直接在Putty终端输出,得看你是怎么部署后端的,下面分几种常见情况给你说解法:
1. 用PM2管理进程(最常用的部署方式)
如果你的Node应用是用PM2启动的,日志都被PM2统一管理了:
- 实时查看日志:在Putty里执行
pm2 logs <你的应用名称/ID>,要是记不清应用名/ID,直接输pm2 list就能看到所有运行的应用。想只看错误日志加--err,只看普通输出加--out,或者pm2 logs --raw看原始未格式化的内容。 - 查看历史日志:PM2默认把日志存在
~/.pm2/logs/目录下,每个应用对应[应用名]-out.log(正常输出)和[应用名]-err.log(错误输出),用tail -f ~/.pm2/logs/your-app-out.log就能实时追踪,用cat或者less可以翻阅历史内容。
2. 用systemd配置成系统服务
很多Linux服务器会把Node应用配置成systemd服务,这种情况用journalctl查日志:
- 实时查看服务日志:执行
journalctl -u <你的服务名>.service -f,-f参数是实时刷新的意思,能看到最新的日志输出。 - 过滤错误日志:如果只想看错误信息,加
-p err,比如journalctl -u your-service.service -p err -f。 - 查看近期日志:比如看最近1小时的日志,用
journalctl -u your-service.service --since "1 hour ago",还能指定具体时间范围。
3. 直接裸跑应用(不推荐,但临时测试可能用)
要是你直接在Putty里输node app.js启动,一旦关闭Putty进程就会终止,而且日志也不会保存。这种情况可以用nohup让进程后台运行并把日志写入文件:
nohup node app.js > app.log 2>&1 &
这个命令会把所有标准输出(console.log内容)和错误输出(报错信息)都写到当前目录的app.log里,之后用tail -f app.log就能实时查看日志了。
额外排查小技巧
- 先确认本地和生产环境的Node版本是否一致,两边都执行
node -v对比,有些语法或第三方包的兼容性问题会导致生产环境失效。 - 检查环境变量!生产环境的
.env文件配置可能和本地不一样,比如数据库连接字符串、API密钥,甚至代码里可能有if (process.env.NODE_ENV === 'production')这样的判断,导致某些console.log被屏蔽了。 - 如果还是看不到日志,试试在代码里强制写入日志文件,比如:
const fs = require('fs'); // 在关键错误捕获处添加 try { // 你的业务逻辑代码 } catch (err) { fs.appendFileSync('./production-error.log', `[${new Date().toISOString()}] 错误详情:${err.stack}\n`); }
内容的提问来源于stack exchange,提问作者MazMat
相关产品推荐
相关产品推荐

