- 首页 >
- 问答 >
-
编程语言 >
- Node.js 在 CentOS 上如何进行日志管理
Node.js 在 CentOS 上如何进行日志管理
小樊
41
2025-12-09 13:02:21
Node.js 在 CentOS 的日志管理实践
一 日志输出与定位
- 直接运行应用时,日志默认输出到控制台;如需写入文件,可在代码中配置日志库,或使用重定向:例如运行命令为:node app.js > logs/app.log 2>&1。使用进程管理工具时,日志位置会不同:使用 PM2 时,日志默认位于 ~/.pm2/logs/,常见文件为 xxx-out.log(标准输出)与 xxx-err.log(标准错误);作为 systemd 服务运行时,可用 journalctl -u your-nodejs-service-name 实时查看服务日志。以上方式可并行使用,便于区分业务日志与系统日志。
二 日志库与级别
- 建议在应用中集成成熟的日志库,以获得结构化输出、灵活的级别与多目标传输能力。常见选择包括:Winston(生态完善、易扩展)、Pino(高性能、低开销)、Bunyan(结构化 JSON 输出)、Log4js(灵活的输出方式与布局)。生产环境推荐统一使用结构化日志(如 JSON),并按需设置级别:DEBUG/INFO/WARN/ERROR/CRITICAL,开发环境可用 DEBUG,生产环境以 INFO/ERROR 为主,避免产生过多日志影响性能与成本。
三 日志轮转与保留策略
- 应用内轮转:使用 winston-daily-rotate-file 等插件按天(或按大小)切分日志,并可配置保留天数与压缩归档,示例要点:filename 指向日志目录、datePattern 设为 ‘.yyyy-MM-dd’、开启 zippedArchive、设置 maxFiles(如保留 14 天)。此方式与应用解耦,便于按实例精细化控制。系统级轮转:使用 logrotate 管理应用日志文件,创建配置 /etc/logrotate.d/nodejsapp,示例策略为:每日轮转(daily)、保留 7 天(rotate 7)、压缩旧日志(compress)、文件不存在不报错(missingok)、空文件不轮转(notifempty)、新建文件权限 0640 并指定属主(create 0640 root root)。如使用 PM2,也可启用其内置日志轮转(如 pm2 logrotate 插件)以统一运维。以上策略可按磁盘容量与合规要求调整保留周期与压缩选项。
四 集中式日志与远程传输
- 小规模或过渡阶段可将日志发往 syslog/rsyslog,在 Node.js 中使用如 winston-syslog 传输器,将日志以 UDP/TCP 发送到本地或远程 rsyslog 服务;在 rsyslog 端可进一步配置将日志转发到集中日志服务器(例如在 /etc/rsyslog.conf 中启用 UDP 输入并使用 . @remote_server_ip:514 转发)。中大规模建议引入 ELK Stack(Elasticsearch + Logstash + Kibana) 或 Grafana Loki 等方案,使用 Filebeat/Logstash 采集应用与系统日志,实现统一检索、可视化与告警。选择集中式方案时,优先采用结构化 JSON 日志,便于解析与聚合分析。
五 快速上手示例
- 示例一(应用内文件日志 + 按天轮转):使用 Winston 与 winston-daily-rotate-file 输出 error.log 与 combined.log,并按天切分、压缩、保留 14 天。示例二(systemd 服务日志):创建服务文件 /etc/systemd/system/myapp.service,将标准输出与错误重定向到日志文件(例如 /var/log/myapp.log),然后用 journalctl -u myapp -f 实时查看;如需将应用日志也写入文件,可在 ExecStart 前增加 shell 重定向或使用日志库写入文件。示例三(PM2 日志):使用 pm2 start app.js --name myapp 启动,日志位于 ~/.pm2/logs/,用 pm2 logs myapp 实时查看;如需按大小/时间轮转,可启用 pm2 logrotate 插件并配置保留策略。