温馨提示×

debian下nodejs日志怎配置

小樊
37
2026-09-22 11:02:37
栏目: 编程语言

在 Debian 下配置 Node.js 日志,一般可以从 应用层日志(代码里)、系统层日志(systemd / journald)、日志轮转(logrotate) 三个方面来做。下面按常见场景说明。


一、Node.js 应用层日志配置

1. 使用日志库(推荐)

不要直接用 console.log 上生产。

常用库:

  • winston(最常用)
  • pino(高性能)
  • bunyan

示例:winston 写文件 + 按级别

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: '/var/log/nodejs/app.log' }),
    new winston.transports.File({ filename: '/var/log/nodejs/error.log', level: 'error' })
  ]
});

logger.info('server started');
logger.error('db connect failed');

二、Debian 系统层日志(systemd)

如果你用 systemd 管理 Node.js 服务(推荐):

1. 创建 service 文件

sudo nano /etc/systemd/system/nodeapp.service

示例:

[Unit]
Description=Node.js App
After=network.target

[Service]
User=node
WorkingDirectory=/opt/nodeapp
ExecStart=/usr/bin/node /opt/nodeapp/app.js
Restart=on-failure
StandardOutput=journal
StandardError=journal
SyslogIdentifier=nodeapp

[Install]
WantedBy=multi-user.target

2. 启动并设置开机自启

sudo systemctl daemon-reload
sudo systemctl start nodeapp
sudo systemctl enable nodeapp

3. 查看日志

journalctl -u nodeapp
journalctl -u nodeapp -f
journalctl -u nodeapp --since "1 hour ago"

✅ 优点:

  • 不用自己写文件
  • 自动带时间、PID
  • 配合 journald 有大小限制

三、日志轮转(非常重要)

方案 1:使用 logrotate(文件日志)

如果你 Node 写文件日志:

sudo nano /etc/logrotate.d/nodeapp

示例:

/var/log/nodejs/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    copytruncate
}

测试:

sudo logrotate -d /etc/logrotate.d/nodeapp

⚠️ copytruncate 对 Node 很重要,否则文件句柄不会释放。


方案 2:systemd + journald(不用 logrotate)

修改:

sudo nano /etc/systemd/journald.conf
SystemMaxUse=500M
SystemKeepFree=100M
MaxRetentionSec=2week
sudo systemctl restart systemd-journald

四、推荐生产方案(总结)

✅ 最佳实践

  • Node 用 winston / pino
  • 服务用 systemd
  • 日志统一走 journald
  • 确需文件日志 → logrotate + copytruncate

如果你愿意,可以告诉我:

  • Node 版本
  • 是否用 PM2 / Docker
  • 是 Web 服务还是脚本

我可以给你一套 可直接用的配置模板。

0 踩