Ubuntu Node.js日志文件如何管理
导读:Ubuntu 上 Node.js 日志管理实操指南 一 核心原则与总体架构 在应用内使用成熟的日志库(如 Winston、Pino、Bunyan、Log4js),统一日志级别(如 error、warn、info、debug),并优先输出结...
Ubuntu 上 Node.js 日志管理实操指南
一 核心原则与总体架构
- 在应用内使用成熟的日志库(如 Winston、Pino、Bunyan、Log4js),统一日志级别(如 error、warn、info、debug),并优先输出结构化日志(JSON),便于检索与分析。
- 采用“轮转 + 压缩 + 保留策略”控制磁盘占用,可结合应用内轮转与系统级 logrotate。
- 生产建议接入集中式日志(如 ELK Stack、Graylog),便于搜索、告警与可视化。
- 使用进程管理工具(如 PM2)简化运行与日志采集;如使用 systemd,可对接 journald/syslog 统一采集。
二 应用内日志与轮转实践
- 使用 Winston 输出到文件并区分级别(开发环境同时输出到控制台):
// logger.js
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({
filename: 'logs/error.log', level: 'error' }
),
new winston.transports.File({
filename: 'logs/combined.log' }
),
],
}
);
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple() }
));
}
module.exports = logger;
- 按时间/大小自动轮转(winston-daily-rotate-file):
// logger-rotate.js
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
filename: 'logs/application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d',
}
);
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [transport],
}
);
module.exports = logger;
- Express 场景可用 morgan 将 HTTP 访问日志接入 Winston(或其他日志库)。
三 系统级与进程管理方案
- 使用 logrotate 管理 Node.js 应用日志文件(适合写入文件的应用)
- 创建配置:/etc/logrotate.d/nodejs-app
/path/to/your/nodejs/app/logs/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 root adm
}
- 测试与生效:
sudo logrotate -f /etc/logrotate.d/nodejs-app
- 使用 PM2 内置日志管理
- 常用命令:
pm2 start app.js --name my-app
pm2 set pm2:log-date-format "YYYY-MM-DD HH:mm:ss"
pm2 set pm2:max-size "20M"
pm2 set pm2:retain "14d"
pm2 logs my-app
- 日志默认目录:~/.pm2/logs/(按应用名生成 .log 与 .err.log)。
- 使用 systemd 将输出接入 journald/syslog
- 示例服务片段:
[Service]
ExecStart=/usr/bin/node /path/to/app.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=yourapp
- 查看:
journalctl -u yourapp -f
- 将日志发送到 rsyslog(再转发到集中式系统)
- 简单匹配示例(/etc/rsyslog.d/50-default.conf):
if $programname == 'nodejs' then /var/log/nodejs.log
&
stop
- 重启服务:sudo systemctl restart rsyslog。
四 集中式日志与监控分析
- 集中式方案:将日志发送到 ELK Stack(Elasticsearch、Logstash、Kibana) 或 Graylog,便于检索、聚合、可视化与告警。
- 轻量转发:使用 rsyslog 或 fluentd 做日志采集与转发。
- 分析与告警:结合 Kibana 或 Logwatch/Analog 做报表与异常发现;进程管理工具(如 PM2)可用于实时日志查看与基础监控。
五 最佳实践与维护清单
- 明确日志级别与输出目标;生产以文件为主、控制台为辅;优先结构化 JSON。
- 制定保留周期与容量上限(如保留 7–14 天、单文件 20MB 上限),并启用压缩归档。
- 避免记录敏感信息(如密码、密钥、令牌);必要时做脱敏。
- 建立监控与告警(磁盘使用率、错误日志激增等),并定期审计与清理。
- 团队统一日志字段规范(如 timestamp、level、service、trace_id),便于跨服务追踪。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Node.js日志文件如何管理
本文地址: https://pptw.com/jishu/768298.html
