温馨提示×

Nodejs日志在Debian如何配置

小樊
43
2026-08-11 23:01:51
栏目: 编程语言

在 Debian 上配置 Node.js 日志,通常分为 应用层日志系统层日志 两部分。下面按常见场景给你一个完整、实用的说明。


一、Node.js 应用层日志配置(最常见)

1️⃣ 使用日志库(推荐)

Node.js 本身没有内置日志系统,生产环境建议使用日志库。

常用日志库

  • winston(最常用)
  • pino(性能最好)
  • bunyan(结构化日志)

✅ 示例:使用 winston(推荐)

安装

npm install winston

基础配置示例

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

// 开发环境额外输出到控制台
if (process.env.NODE_ENV !== 'production') {
  logger.add(new winston.transports.Console({
    format: winston.format.simple()
  }));
}

logger.info('服务启动');
logger.error('发生错误');

2️⃣ 日志文件位置(Debian 规范)

推荐路径

/var/log/myapp/

创建目录并设置权限:

sudo mkdir -p /var/log/myapp
sudo chown -R node:node /var/log/myapp

如果你用 root 启动 Node,可省略 chown


二、使用 systemd 管理 Node.js(强烈推荐)

Debian 10+ 默认使用 systemd,这是生产环境标准做法。


1️⃣ 创建 systemd 服务

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

示例:

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

[Service]
Type=simple
User=node
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node index.js
Restart=always
Environment=NODE_ENV=production

StandardOutput=append:/var/log/myapp/stdout.log
StandardError=append:/var/log/myapp/stderr.log

[Install]
WantedBy=multi-user.target

2️⃣ 启动并设置开机自启

sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp

查看日志:

journalctl -u myapp -f

三、结合 journald(systemd 日志)

Node.js 输出到 console.log 会自动进入 systemd:

journalctl -u myapp

持久化 journal 日志(可选):

sudo mkdir -p /var/log/journal
sudo systemctl restart systemd-journald

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

Debian 默认使用 logrotate,防止日志占满磁盘。

logrotate 示例

sudo nano /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 0640 node node
}

测试:

sudo logrotate -d /etc/logrotate.d/myapp

五、Docker 场景(如果你用)

✅ 推荐做法:

  • Node.js 只输出到 stdout / stderr
  • Docker / systemd 负责日志
console.log(JSON.stringify({ level: 'info', msg: 'hello' }))

六、推荐生产配置总结 ✅

项目 推荐
日志库 winston / pino
日志路径 /var/log/myapp/
进程管理 systemd
日志轮转 logrotate
错误日志 单独文件 + stderr
结构化 JSON 格式

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

  • ✅ 你是 裸机 / Docker / PM2
  • ✅ Node 版本
  • ✅ 是否生产环境

我可以给你一份 完全可直接用的配置模板

0