温馨提示×

ubuntu nodejs日志为何异常

小樊
40
2026-10-15 06:26:50
栏目: 编程语言

“Ubuntu 上 Node.js 日志异常”可能由很多原因导致,下面按常见场景 + 排查思路给你一个系统性的说明,你可以对照看看是哪一类。


一、日志“看不到 / 不输出”

1. 日志被重定向或丢弃

常见情况:

  • npm start > /dev/null 2>&1 &
  • systemd 服务未配置 StandardOutput

✅ 检查:

# 看进程启动命令
ps aux | grep node

# systemd 看日志
journalctl -u your-node-service -f

2. 使用了 PM2 但没看 PM2 日志

pm2 logs
pm2 logs app_name

3. 日志写到文件,但路径不对

const fs = require('fs');
fs.writeFileSync('/var/log/node/app.log', 'log');

如果目录不存在会直接报错。

✅ 检查:

ls -l /var/log/node

二、日志“内容异常 / 格式乱”

1. 时区不对(Ubuntu vs Node)

Ubuntu:

date

Node:

console.log(new Date());

✅ 修复:

sudo timedatectl set-timezone Asia/Shanghai

2. 中文乱码

常见于:

  • SSH 客户端编码不一致
  • 文件不是 UTF-8

✅ 检查:

locale

✅ 修复:

sudo apt install locales
sudo locale-gen zh_CN.UTF-8

三、日志“突然中断 / 程序还在但没日志”

1. 缓冲区问题(stdout 被缓冲)

  • console.log 在 pipe 时可能缓冲
  • 崩溃前日志没 flush

✅ 建议:

  • 使用 process.stdout.write
  • 或用日志库(winston / pino)

2. 进程被 OOM 杀掉

dmesg | grep -i oom
journalctl -k | grep node

四、systemd 下的 Node 日志异常(非常常见)

现象

  • 本地跑正常
  • Ubuntu 服务跑没日志

原因

console.log 被 systemd 接管

✅ 正确配置:

[Service]
ExecStart=/usr/bin/node /opt/app/index.js
StandardOutput=journal
StandardError=journal

然后:

journalctl -u node-app -f

五、推荐做法(避免踩坑)

✅ 使用专业日志库:

npm i winston

✅ 生产环境:

  • 不用 console.log
  • 日志落盘 + journald
  • 设置 log rotate

六、你可以补充这些信息,我可以直接定位

  1. 日志从哪里看?(终端 / 文件 / journalctl)
  2. 怎么启动 Node?(npm / pm2 / systemd / docker)
  3. 异常表现是什么?(没日志 / 乱码 / 中断)
  4. Node 版本 & Ubuntu 版本

我可以给你针对性的修复命令。

0 踩