Node.js在Ubuntu上如何处理日志
导读:Node.js 在 Ubuntu 的日志处理实践 一 日志输出方式与位置 使用 console.log / console.error 输出到控制台,适合开发调试;在生产环境建议接入日志库或进程管理器进行持久化与分割。 使用日志库: W...
Node.js 在 Ubuntu 的日志处理实践
一 日志输出方式与位置
- 使用 console.log / console.error 输出到控制台,适合开发调试;在生产环境建议接入日志库或进程管理器进行持久化与分割。
- 使用日志库:
- Winston:多传输、易配置,适合大多数场景。
- Pino:高性能,适合高并发。
- Bunyan:结构化 JSON 输出,便于检索分析。
- Log4js:功能丰富、可灵活配置。
- 常见日志路径:
- 应用项目目录下的 logs/ 或自定义目录。
- 系统目录 /var/log/(若按系统服务或约定存放)。
- 使用 PM2 时,日志默认在 $HOME/.pm2/logs/(如:app-out.log、app-err.log)。
- 查看与分析:使用 tail -f /path/to/file.log 实时查看,或用 less/cat 浏览;定位异常时关注错误类型、消息与堆栈跟踪。
二 日志轮转与保留策略
- 应用内轮转:使用 winston-daily-rotate-file 等库按天或按大小切分,控制单文件体积与保留数量,便于快速回滚与归档。
- 系统级轮转:使用 logrotate 管理日志的轮转、压缩与清理,适合统一运维规范。示例配置(/etc/logrotate.d/nodejs):
- 路径:/var/log/nodejs/*.log
- 策略:daily(每日轮转)、rotate 7(保留 7 天)、compress(压缩)、missingok(缺失不报错)、notifempty(空文件不轮转)、create 0640 root adm(新建文件权限与属主)。
三 进程管理与系统日志集成
- 使用 PM2 管理进程与日志:
- 安装:npm install pm2 -g
- 启动:pm2 start app.js --name my-app
- 查看:pm2 logs my-app(实时聚合 stdout/stderr),支持日志文件分割与时间戳。
- 使用 systemd 托管 Node.js 服务:
- 将日志输出到 stdout/stderr,通过 journalctl 查看与检索:
- 实时查看:journalctl -u your-nodejs.service -f
- 按时间筛选:journalctl -u your-nodejs.service --since “2025-11-24 00:00:00”
- 将日志输出到 stdout/stderr,通过 journalctl 查看与检索:
- 与 Rsyslog 集成:可将应用日志发送到系统日志,统一由 rsyslog 进行过滤、转发与存储(适合多服务集中)。
四 结构化与集中式日志
- 结构化日志:优先输出 JSON(如 Winston/Pino/Bunyan),在日志中携带 timestamp、level、service、trace_id 等字段,便于检索、聚合与链路追踪。
- 集中式日志:将日志发送到 ELK Stack(Elasticsearch, Logstash, Kibana) 或 Graylog 等平台,实现跨服务统一检索、可视化与告警;高吞吐场景可结合 Kafka 等消息队列缓冲。
- 监控与可视化:除日志外,结合 Prometheus + Grafana 暴露指标(请求时延、错误率、内存/CPU),与日志联动定位问题。
五 快速上手示例
- 使用 Winston 写入文件并区分错误与合并日志:
- 安装: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’ } )
]
} );
if (process.env.NODE_ENV !== ‘production’) {
logger.add(new winston.transports.Console({ format: winston.format.simple() } ));
}
logger.info(‘Server started on port 3000’);
logger.error(‘Database connection failed’);
- const winston = require(‘winston’);
- 查看日志:在项目目录执行 tail -f combined.log 或 tail -f error.log 实时观察输出。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Node.js在Ubuntu上如何处理日志
本文地址: https://pptw.com/jishu/755637.html
