Node.js在Ubuntu上运行时,错误日志究竟藏在哪里?这其实取决于你的启动方式和具体配置。下面就把常见场景和对应的路径一一梳理清楚,方便你快速定位问题。

1. 直接运行Node.js应用(无进程管理器)
- 控制台输出:如果直接用
node app.js启动,错误信息会实时显示在终端里——无论是同步异常、异步报错,还是未捕获的崩溃,都能一眼看到。这其实是最直接的“日志”方式。 - 自定义日志文件:如果代码里通过
fs模块或者日志库(比如winston、pino)指定了输出路径,比如/home/username/project/logs/error.log,那么错误就会写入那个文件。这时候需要翻翻应用代码里的日志配置——比如winston.createLogger中transports.File的设置,才能确认具体路径。
2. 使用PM2进程管理器
如果通过 pm2 start app.js 启动,PM2 会自动捕获应用的所有错误,并统一存放到自己的日志目录里:
- 默认路径:错误日志位于用户主目录下的
.pm2/logs/文件夹,文件名是应用名-err.log(比如my-node-app-err.log)。 - 查看命令:用
pm2 logs 应用名可以实时看错误日志,或者pm2 logs --lines 100只看最近100行,非常方便。
3. 通过Systemd服务运行
如果把 Node.js 应用配置成 Systemd 服务(比如 nodejs.service),错误日志就会汇入系统日志体系:
- 查看命令:使用
journalctl -u your-nodejs-service-name -t(把your-nodejs-service-name换成实际的服务名称,可以通过systemctl list-units --type=service找到)。这条命令会过滤出与 Node.js 相关的错误日志。 - 系统日志文件:部分系统也会把 Node.js 错误记录到
/var/log/syslog、/var/log/kern.log或/var/log/error.log中,直接用cat或tail查看即可。
4. 自定义系统日志路径
如果开发者手动配置了 Systemd 服务文件(比如 /etc/systemd/system/nodejs.service),很可能在服务配置里指定了日志路径。例如 StandardOutput=file:/var/log/nodejs/app.log、StandardError=file:/var/log/nodejs/app-error.log。这时候直接检查服务配置文件中的 StandardOutput 和 StandardError 参数,就能找到日志的准确位置。
注意事项
- 如果没明确配置日志路径,优先检查应用代码里的日志配置(比如
winston、pino的transports设置),以及package.json中的启动脚本。有时候日志可能被写到了默认的npm输出里。 - 还有一个万能技巧:用
ls -l /proc/(/fd/ 是 Node.js 进程ID,可以通过ps aux | grep node获取),可以列出进程打开的所有文件描述符,日志文件的路径就在其中。这招在找不到日志时尤其管用。