ubuntu

Ubuntu如何使用Node.js进行日志管理

小樊
41
2025-10-31 17:17:16
栏目: 编程语言

Ubuntu下使用Node.js进行日志管理的完整指南

在Ubuntu系统中,Node.js应用的日志管理可通过基础日志记录第三方日志库日志轮转集中式管理进程管理工具实现,以下是具体步骤:

一、基础日志记录:使用内置console模块

console模块是Node.js自带的简单日志工具,适合开发调试,通过console.log()console.error()等方法输出不同级别日志到控制台。
示例(Express应用):

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('收到GET请求'); // 信息日志
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('服务器运行在 http://localhost:3000'); // 启动日志
});

局限性:无法持久化存储、缺乏级别过滤,生产环境建议使用专业日志库。

二、第三方日志库:结构化与高级功能支持

1. Winston(最流行)

Winston支持多传输目标(控制台、文件、HTTP等)、日志级别(debug/info/warn/error)及JSON格式化,适合复杂应用。
安装:

npm install winston

配置示例:

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info', // 最低日志级别
  format: winston.format.json(), // 结构化日志(便于后续分析)
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }), // 错误日志单独存储
    new winston.transports.File({ filename: 'combined.log' }), // 所有日志合并
    // 非生产环境输出到控制台(简化格式)
    ...(process.env.NODE_ENV !== 'production' ? 
      [new winston.transports.Console({ format: winston.format.simple() })] : []
    )
});

// 使用示例
logger.info('服务器启动成功');
logger.error('数据库连接失败');

2. Bunyan(JSON格式原生支持)

Bunyan输出结构化JSON日志,便于与日志分析工具(如ELK)集成,适合生产环境。
安装:

npm install bunyan

配置示例:

const bunyan = require('bunyan');

const logger = bunyan.createLogger({
  name: 'my-app', // 应用名称(日志标识)
  level: 'info',
  streams: [
    { level: 'info', stream: process.stdout }, // 控制台输出
    { level: 'error', path: 'app-error.log' } // 错误日志写入文件
  ]
});

// 使用示例
logger.info('用户登录成功', { userId: 123 }); // 可附加额外字段
logger.error('订单创建失败', { orderId: 456, error: '库存不足' });

3. Pino(高性能首选)

Pino以极快的日志记录速度著称,适合高并发应用,日志同样为JSON格式。
安装:

npm install pino pino-pretty

配置示例:

const pino = require('pino');
const pinoPretty = require('pino-pretty');

const logger = pino({ level: 'info' }, pinoPretty({ colorize: true })); // 输出美化

// 使用示例
logger.info('API请求处理完成', { method: 'GET', path: '/api/users' });
logger.error('支付接口超时', { transactionId: 'abc123', timeout: 5000 });

三、日志轮转:防止日志文件过大

当日志文件积累到一定大小时,需通过轮转分割文件并压缩旧日志,节省磁盘空间。常用工具:

1. Winston-Daily-Rotate-File(Winston扩展)

专门为Winston设计的日志轮转插件,支持按天/小时分割、压缩及保留天数配置。
安装:

npm install winston-daily-rotate-file

配置示例:

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

const transport = new DailyRotateFile({
  filename: 'application-%DATE%.log', // 文件名模板(%DATE%为日期占位符)
  datePattern: 'YYYY-MM-DD', // 按天分割
  zippedArchive: true, // 压缩旧日志(.gz格式)
  maxSize: '20m', // 单个文件最大20MB
  maxFiles: '14d' // 保留14天日志
});

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [transport]
});

2. Logrotate(系统级工具)

Ubuntu自带的日志轮转工具,可管理Node.js及其他应用的日志文件,无需修改代码。
配置步骤:

  1. 创建Logrotate配置文件:
    sudo nano /etc/logrotate.d/nodejs
    
  2. 添加以下内容(针对/var/log/nodejs/目录下的所有.log文件):
    /var/log/nodejs/*.log {
      daily # 每天轮转
      missingok # 文件不存在时不报错
      rotate 7 # 保留7天日志
      compress # 压缩旧日志(.gz格式)
      notifempty # 日志为空时不轮转
      create 0640 root adm # 新日志文件权限
    }
    
  3. 测试配置是否生效:
    sudo logrotate -vf /etc/logrotate.d/nodejs
    

四、集中式日志管理:ELK Stack(可选)

对于分布式系统,可将Node.js日志发送到ELK Stack(Elasticsearch+Logstash+Kibana)进行集中存储、搜索及可视化分析。

1. 安装ELK组件

# 安装Elasticsearch
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update && sudo apt install elasticsearch

# 安装Logstash
sudo apt install logstash

# 安装Kibana
sudo apt install kibana

2. 配置Logstash接收Node.js日志

创建Logstash配置文件(/etc/logstash/conf.d/nodejs.conf):

input {
  file {
    path => "/var/log/nodejs/*.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

filter {
  json {
    source => "message" # 解析JSON格式日志
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "nodejs-logs-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug } # 控制台输出(调试用)
}

3. 启动ELK服务

sudo systemctl start elasticsearch
sudo systemctl start logstash
sudo systemctl start kibana

访问http://localhost:5601(Kibana)即可查看、分析日志。

五、进程管理工具:PM2(日志管理辅助)

PM2是Node.js进程管理工具,可自动重启应用、监控资源,并提供日志管理功能(集中存储、实时查看、轮转)。

1. 安装与启动应用

sudo npm install pm2 -g # 全局安装
pm2 start app.js --name "my-app" # 启动应用并命名

2. 日志查看与导出

# 实时查看所有日志(合并stdout和stderr)
pm2 logs my-app

# 查看特定日志文件(默认路径:~/.pm2/logs/)
pm2 logs my-app --lines 100 # 显示最后100行

# 导出日志到文件
pm2 logs my-app > my-app.log

3. 日志轮转配置

PM2内置日志轮转功能,可通过pm2 set命令开启:

pm2 set pm2:log_rotate true # 开启轮转
pm2 set pm2:log_size 10M # 单个文件最大10MB
pm2 set pm2:log_retain 7 # 保留7天日志

通过以上方法,可在Ubuntu系统中实现Node.js日志的结构化管理持久化存储高效轮转集中分析,满足从开发到生产的全生命周期需求。

0
看了该问题的人还看了