温馨提示×

Linux Nodejs日志如何配置

小樊
33
2026-08-29 01:04:25
栏目: 编程语言

在 Linux 环境下配置 Node.js 日志,常见做法包括:
✅ 使用日志库
✅ 配置日志级别
✅ 按日期 / 大小滚动日志文件
✅ 结合 systemd / PM2
✅ 与 Linux 日志系统(rsyslog / journald)对接

下面从 推荐方案 → 进阶方案 → 生产实践 逐步说明。


一、最常用方案:winston + 文件日志

1️⃣ 安装

npm install winston

2️⃣ 基础配置示例

const winston = require('winston');
const path = require('path');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.printf(({ timestamp, level, message }) => {
      return `${timestamp} [${level}]: ${message}`;
    })
  ),
  transports: [
    new winston.transports.File({ filename: '/var/log/node/app.log' }),
    new winston.transports.Console(),
  ],
});

logger.info('服务启动成功');
logger.error('数据库连接失败');

✅ 优点

  • 简单直观
  • 适合中小项目

⚠️ 注意

  • /var/log/node 目录需存在且 Node 有写权限
sudo mkdir -p /var/log/node
sudo chown -R $(whoami) /var/log/node

二、按日期自动切分日志(强烈推荐)

方案:winston-daily-rotate-file

安装

npm install winston-daily-rotate-file

配置

const DailyRotateFile = require('winston-daily-rotate-file');

const transport = new DailyRotateFile({
  dirname: '/var/log/node',
  filename: 'app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxSize: '20m',
  maxFiles: '14d', // 保留 14 天
});

const logger = winston.createLogger({
  transports: [
    transport,
    new winston.transports.Console(),
  ],
});

✅ 自动生成:

/var/log/node/app-2026-01-21.log
/var/log/node/app-2026-01-22.log

三、不同环境不同日志级别(生产必备)

const level = process.env.NODE_ENV === 'production' ? 'warn' : 'debug';

const logger = winston.createLogger({
  level,
  transports: [/* ... */],
});

常见级别:

error > warn > info > http > verbose > debug > silly

四、使用 PM2 管理 Node.js 日志(生产常见)

1️⃣ 启动应用

pm2 start app.js --name my-api

2️⃣ 查看日志

pm2 logs my-api

3️⃣ 日志位置

~/.pm2/logs/

4️⃣ 配置日志大小限制

ecosystem.config.js

module.exports = {
  apps: [{
    name: 'my-api',
    script: 'app.js',
    error_file: '/var/log/node/err.log',
    out_file: '/var/log/node/out.log',
    merge_logs: true,
    max_memory_restart: '500M',
  }]
};

✅ PM2 自动处理:

  • 标准输出
  • 错误输出
  • 重启日志

五、systemd + Node.js(Linux 服务)

1️⃣ 服务文件

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

[Service]
ExecStart=/usr/bin/node /opt/app/app.js
WorkingDirectory=/opt/app
Restart=always
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

2️⃣ 查看日志

journalctl -u node-app -f

✅ 优点

  • 与 Linux 日志系统统一
  • 支持日志轮转(journald)

六、不推荐但要知道的方式

console.log 直接写文件

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

问题:

  • 无日志级别
  • 无滚动
  • 不适合生产

七、推荐生产组合 ✅

场景 推荐方案
小型项目 winston + 文件
中型项目 winston + daily-rotate
生产环境 PM2 + winston
系统级 systemd + journald
容器 JSON 日志输出到 stdout

八、日志最佳实践(非常重要)

✅ 不在日志中输出:

  • 密码
  • Token
  • 身份证号

✅ 错误日志包括:

  • 时间
  • 请求 ID
  • 堆栈信息

✅ 生产环境:

  • 只记录 warn 以上
  • 定期清理旧日志

如果你愿意,我可以:

  • ✅ 给你一个 完整生产级日志模板
  • ✅ 帮你设计 Docker + Node + 日志方案
  • ✅ 根据 Express / Koa / NestJS 给具体配置

你现在的 Node.js 项目是哪种运行方式?

0