温馨提示×

Ubuntu Nodejs日志怎么配置

小樊
41
2026-07-10 05:25:05
栏目: 编程语言

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


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

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

✅ 常用日志库

  • winston(最常用)
  • pino(高性能)
  • morgan(HTTP 请求日志)

✅ 示例:Winston 日志配置

安装

npm install winston

基础配置(logger.js

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    // 控制台输出
    new winston.transports.Console(),

    // 普通日志
    new winston.transports.File({ filename: 'logs/app.log' }),

    // 错误日志
    new winston.transports.File({ filename: 'logs/error.log', level: 'error' })
  ]
});

module.exports = logger;

使用

const logger = require('./logger');

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

✅ 日志文件会生成在:

your-project/logs/app.log
your-project/logs/error.log

✅ 示例:Pino(适合高并发)

npm install pino pino-pretty
const pino = require('pino');
const logger = pino({
  transport: {
    target: 'pino-pretty'
  }
});

logger.info('Hello Pino');

二、日志按日期 / 大小切割(生产环境必做)

✅ 使用 winston-daily-rotate-file

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

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

✅ 效果:

  • 每天一个日志文件
  • 自动删除 14 天前的日志

三、Ubuntu 系统层日志(PM2 / systemd)

✅ 使用 PM2(最推荐)

安装

npm install -g pm2

启动应用

pm2 start app.js --name my-api

查看日志

pm2 logs
pm2 logs my-api

日志位置

~/.pm2/logs/

配置日志大小限制

pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

✅ 自动按大小切割日志


✅ 使用 systemd(服务器级)

示例 service 文件

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

[Service]
ExecStart=/usr/bin/node /var/www/app/app.js
WorkingDirectory=/var/www/app
Restart=always
StandardOutput=append:/var/log/node/app.log
StandardError=append:/var/log/node/error.log

[Install]
WantedBy=multi-user.target

创建日志目录

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

启动

sudo systemctl daemon-reload
sudo systemctl start my-node-app
sudo systemctl enable my-node-app

查看日志

journalctl -u my-node-app -f

四、生产环境最佳实践 ✅

✅ 推荐组合:

  • 应用日志:winston + daily-rotate
  • 进程管理:PM2 或 systemd
  • 日志目录/var/log/yourapp
  • 不上传日志到 Git
logs/
*.log

五、你适合哪种方案?

场景 推荐
本地开发 pino / morgan
小型服务器 PM2 + winston
生产环境 systemd + winston
高并发 pino

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

  • ✅ 是否使用 PM2 / Docker / systemd
  • ✅ 是否 生产环境
  • ✅ Node 版本

我可以帮你写一套 完整可用的日志配置示例

0