温馨提示×

linux nodejs日志重启消失

小樊
52
2026-09-26 18:28:40
栏目: 编程语言

在 Linux 上 Node.js 日志重启后消失,通常不是 Node 自身的问题,而是日志写在哪里、由谁管理、是否持久化的问题。下面按最常见原因逐一说明。


一、最常见原因

1️⃣ 日志写到了「标准输出 / 标准错误」

很多 Node 程序这样写:

console.log('xxx')

这些日志:

  • 不会写文件
  • 由启动方式决定去哪

不同启动方式的结果

启动方式 重启后日志
直接 node app.js 终端关闭即消失
nohup node app.js & 在 nohup.out(重启可能清空)
systemd 在 journalctl
docker 在容器日志

✅ 结论:
console.log 不是“日志系统”,只是输出。


2️⃣ 日志写在容器 / 临时目录

例如:

  • /tmp
  • Docker 容器内部
  • 云函数环境

重启后:

  • 容器销毁 → 日志没了
  • tmp 被清理

3️⃣ 日志文件被覆盖而不是追加

错误示例:

fs.writeFile('app.log', data)

每次重启都会清空文件

✅ 应使用:

fs.appendFile('app.log', data)

4️⃣ systemd 没配置持久化

如果是 systemd 启动:

journalctl -u yourapp

默认:

  • 重启可能清理旧日志
  • 日志在内存或有限空间

二、正确做法(推荐方案)

✅ 方案 1:写入真实日志文件(最常用)

const fs = require('fs');
fs.appendFileSync('/var/log/myapp/app.log', msg);

并确保:

  • 目录存在
  • 权限正确
  • 不会被清理

✅ 方案 2:使用日志库(强烈推荐)

npm i winston
const winston = require('winston');

const logger = winston.createLogger({
  transports: [
    new winston.transports.File({ filename: '/var/log/myapp/app.log' })
  ]
});

logger.info('server started');

✅ 支持:

  • 文件
  • 按大小切割
  • 不丢日志

✅ 方案 3:systemd + 文件日志(生产标准)

[Service]
ExecStart=/usr/bin/node /opt/app/app.js
StandardOutput=append:/var/log/myapp/out.log
StandardError=append:/var/log/myapp/err.log

✅ 方案 4:Docker 场景

不要写容器里:

  • 挂载 volume
  • 或统一送到 stdout + 日志采集(ELK / Loki)

三、快速自查清单 ✅

请确认:

  • [ ] 日志是写在文件,还是 console
  • [ ] 文件路径是否在 /var/log 或持久盘
  • [ ] 是否用了 writeFile(错误)
  • [ ] 是否容器 / tmp 环境
  • [ ] 是否 systemd + journalctl

四、如果你愿意,我可以更精准帮你

你可以贴一下:

  1. 启动方式(node / pm2 / systemd / docker)
  2. 日志怎么写的(代码)
  3. 重启方式(reboot / 容器重启 / pm2 restart)

我可以直接告诉你为什么消失 + 改哪几行。

0 踩