Ubuntu如何使用Node.js进行日志管理
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及其他应用的日志文件,无需修改代码。
配置步骤:
- 创建Logrotate配置文件:sudo nano /etc/logrotate.d/nodejs
- 添加以下内容(针对/var/log/nodejs/目录下的所有.log文件):/var/log/nodejs/*.log { daily # 每天轮转 missingok # 文件不存在时不报错 rotate 7 # 保留7天日志 compress # 压缩旧日志(.gz格式) notifempty # 日志为空时不轮转 create 0640 root adm # 新日志文件权限 }
- 测试配置是否生效: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日志的结构化管理、持久化存储、高效轮转及集中分析,满足从开发到生产的全生命周期需求。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu如何使用Node.js进行日志管理
本文地址: https://pptw.com/jishu/740428.html
