温馨提示×

debian nodejs日志怎么配置

小樊
41
2026-09-28 09:34:53
栏目: 编程语言

在 Debian 上配置 Node.js 日志,通常分为应用层面日志和系统服务层面日志两部分。下面按常见场景说明。


一、应用层面(Node.js 代码内日志)

1. 使用 console(最简单)

console.log('info');
console.error('error');

日志会输出到 stdout / stderr,由运行方式决定去向。


2. 使用日志库(推荐)

winston

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

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

logger.info('server started');

pino(高性能)

npm install pino
const pino = require('pino');
const logger = pino({ level: 'info' });
logger.info('hello');

✅ 建议生产环境:

  • 日志写到文件或 stdout
  • 不要写绝对路径到用户目录

二、系统服务层面(systemd + Debian)

1. 用 systemd 管理 Node.js

创建服务文件:

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

示例:

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

[Service]
User=nodeuser
WorkingDirectory=/opt/nodeapp
ExecStart=/usr/bin/node index.js
Restart=always
Environment=NODE_ENV=production
StandardOutput=append:/var/log/nodejs/app.out.log
StandardError=append:/var/log/nodejs/app.err.log

[Install]
WantedBy=multi-user.target

启用:

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

2. 查看日志

journalctl -u nodeapp
journalctl -u nodeapp -f

Node.js 输出会自动进 systemd journal。


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

使用 logrotate

sudo nano /etc/logrotate.d/nodejs

示例:

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

✅ copytruncate 适合不能重启的 Node 进程


四、Docker(如适用)

CMD ["node", "index.js"]

日志直接输出 stdout:

docker logs -f container_name

五、推荐实践总结

✅ 生产环境:

  • 用 winston / pino
  • 输出到 stdout 或由 systemd 管理
  • 配合 logrotate
  • 避免 console.log 乱用

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

  • Node 版本
  • 是否用 PM2 / Docker / systemd
  • 想存文件还是进 journal

我可以给你精确配置示例。

0 踩