Node.js在Ubuntu中如何进行日志管理
导读:Node.js在Ubuntu中的日志管理方案 一、基础日志记录:内置模块与第三方库 Node.js内置console模块可用于快速输出日志(如console.log( 、console.error( ),但更适合开发调试。生产环境中建议使用...
Node.js在Ubuntu中的日志管理方案
一、基础日志记录:内置模块与第三方库
Node.js内置console
模块可用于快速输出日志(如console.log()
、console.error()
),但更适合开发调试。生产环境中建议使用第三方日志库,提供更强大的功能(如日志级别、格式化、多输出目标):
- Winston:最流行的日志库之一,支持控制台、文件、HTTP等多种传输方式,可配置日志级别(如
info
、error
)和JSON格式输出。示例配置: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' } ) // 所有日志合并 ] } ); if (process.env.NODE_ENV !== 'production') { logger.add(new winston.transports.Console({ format: winston.format.simple() } )); // 开发环境输出到控制台 }
- Bunyan:轻量级JSON日志库,日志输出为结构化格式,便于后续处理。示例:
const bunyan = require('bunyan'); const logger = bunyan.createLogger({ name: 'my-app', level: 'info' } ); logger.info('This is an info log'); // 输出JSON格式日志
二、日志轮转:防止日志文件过大
日志轮转可自动分割日志文件(按大小或时间),压缩旧日志并保留指定数量,避免磁盘空间耗尽。常见方法:
- Winston-Daily-Rotate-File:Winston的扩展插件,支持按日期/大小轮转。配置示例:
const DailyRotateFile = require('winston-daily-rotate-file'); const transport = new DailyRotateFile({ filename: 'application-%DATE%.log', // 日志文件名模板(%DATE%替换为日期) datePattern: 'YYYY-MM-DD', // 按天分割 zippedArchive: true, // 压缩旧日志 maxSize: '20m', // 单个文件最大20MB maxFiles: '14d' // 保留14天日志 } ); const logger = winston.createLogger({ transports: [transport] } );
- Logrotate工具(系统级):Ubuntu自带的日志管理工具,可管理Node.js及其他应用的日志。创建配置文件
/etc/logrotate.d/nodejs
:/var/log/nodejs/*.log { daily # 每天轮转 missingok # 文件不存在时不报错 rotate 7 # 保留7天日志 compress # 压缩旧日志 notifempty # 日志为空时不轮转 create 0640 root adm # 新日志文件权限 }
三、进程管理器:增强日志管理能力
使用PM2(进程管理器)可简化Node.js应用管理,提供日志收集、实时查看、自动重启等功能:
- 安装与启动:
npm install pm2 -g
,启动应用:pm2 start app.js --name my-app
。 - 日志查看:
pm2 logs my-app
(实时查看所有日志);pm2 logs my-app --lines 100
(查看最近100行)。 - 日志配置:通过
ecosystem.config.js
自定义日志路径和轮转:module.exports = { apps: [{ name: 'my-app', script: 'app.js', out_file: '/var/log/nodejs/my-app-out.log', // 标准输出日志路径 error_file: '/var/log/nodejs/my-app-err.log', // 错误输出日志路径 log_date_format: 'YYYY-MM-DD HH:mm:ss', // 日志时间格式 log_rotation: true, // 启用轮转 log_rotation_interval: '1d', // 每天轮转 log_rotation_size: '10M' // 单个文件最大10MB } ] } ;
四、集中式日志管理:分布式系统解决方案
对于生产环境,建议使用集中式日志管理(如ELK Stack、Graylog),将日志收集、存储、分析统一管理:
- ELK Stack(Elasticsearch + Logstash + Kibana):
- Logstash收集日志:通过Filebeat(轻量级日志采集器)将Node.js日志发送到Logstash。
- Elasticsearch存储与索引:Logstash将日志解析后存入Elasticsearch,支持快速检索。
- Kibana可视化:通过Kibana创建 dashboard,实现日志的实时分析与可视化(如错误率统计、请求耗时分析)。
- 配置示例:在Node.js应用中添加Logstash传输(使用
winston-logstash
库):const winston = require('winston'); const Logstash = require('winston-logstash').Logstash; const logger = winston.createLogger({ transports: [ new Logstash({ port: 5000, host: 'localhost' } ) // 连接到本地的Logstash服务 ] } );
五、日志存储路径与权限管理
- 默认路径:若未配置,日志通常存储在应用所在目录的
logs
子目录(如./logs/app.log
)。 - 自定义路径:通过代码或配置文件指定(如Winston的
filename
选项、PM2的out_file
配置)。 - 权限设置:确保日志目录可写(如
mkdir -p /var/log/nodejs & & chown -R $USER:adm /var/log/nodejs
),避免权限问题导致日志无法写入。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Node.js在Ubuntu中如何进行日志管理
本文地址: https://pptw.com/jishu/719375.html