温馨提示×

centos js日志为何为空

小樊
36
2026-10-20 15:24:40
栏目: 编程语言

在 CentOS 上“JS 日志为空”通常不是系统问题,而是日志没产生 / 没写对位置 / 被重定向吞噬了。下面按最常见原因逐一排查。


一、最常见原因

1. Node.js 进程根本没执行到日志代码

检查是否真的跑了你以为的脚本:

ps -ef | grep node

确认进程存在,且路径正确。


2. 用了 console.log,但输出被重定向了

如果你是这样启动的:

node app.js > /dev/null 2>&1 &

那 所有 JS 日志都被丢掉了。

✅ 正确方式:

node app.js > app.log 2>&1 &

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

常见错误:

fs.writeFileSync('./logs/app.log', data)

在 CentOS 上:

  • ./ 是当前工作目录
  • 不一定是你的项目目录

✅ 建议用绝对路径:

const path = require('path')
const logPath = path.join(__dirname, 'logs', 'app.log')

4. 文件权限不足(CentOS 很常见)

如果 JS 是以 nginx / nobody / 普通用户 运行:

ls -l /var/log/yourApp/

没写权限就会静默失败。

✅ 解决:

chown -R youruser:youruser /var/log/yourApp
chmod 755 /var/log/yourApp

5. systemd 服务没配置日志输出

如果你是用 systemctl 启动:

[Service]
ExecStart=/usr/bin/node /opt/app/app.js

JS 的 console.log 会进 journald,不会在文件里。

查看日志:

journalctl -u your-service -f

✅ 如需写文件:

StandardOutput=append:/var/log/app/app.log
StandardError=append:/var/log/app/error.log

6. 程序崩了,根本没到日志逻辑

先看有没有报错:

node app.js

或:

journalctl -u your-service --no-pager | tail -50

7. 使用了日志库但没初始化 / level 太高

例如 winston / pino:

logger.info('xxx') // 但 level 设成 error

✅ 检查:

logger.level = 'debug'

二、快速自检清单 ✅

# 1. 进程在不在
ps -ef | grep node

# 2. 日志文件在不在
ls -l /path/to/log

# 3. 文件有没有权限
whoami

# 4. 是否被重定向
cat /proc/<pid>/fd/1

三、推荐做法(生产环境)

  • 用 winston / pino
  • 日志写 绝对路径
  • 用 systemd + journald
  • 不要 > /dev/null

如果你愿意,可以把:

  • 启动方式(命令 / systemd)
  • JS 日志代码示例
  • CentOS 版本

发出来,我可以直接帮你定位是哪一条。

0 踩