商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > CentOS上Node.js日志如何配置与管理

CentOS上Node.js日志如何配置与管理

  发布于2026-07-13 阅读(0)

扫一扫,手机访问

聊聊CentOS上Node.js日志的配置与管理,其实核心思路就那么几条。无论你是刚接触服务端开发,还是已经在生产环境摸爬滚打多年,日志这件事都绕不开——它既是调试的拐杖,也是运维的眼睛。下面直接进入正题。

CentOS上Node.js日志如何配置与管理

一 核心方案与工具

选对工具,事半功倍。在应用内部,有几款日志库值得优先考虑:

  • Winston:功能全面,支持多传输通道,配置起来很灵活。
  • Pino:主打高性能、低开销,适合对性能敏感的场景。
  • Bunyan:输出结构化JSON,特别适合后续的集中式处理。
  • Log4js:配置灵活,内置按大小、按时间的滚动策略。

在系统层面,logrotate 是管理日志轮转与压缩的老牌工具,非常适合长期运行的服务。如果用了进程管理器,PM2 自带日志聚合查看功能,能大大简化开发和运维的日常工作。

一旦服务规模上来,就需要考虑集中式日志了。常见的做法是通过 rsyslog(UDP/TCP 514端口)把日志发到远程,或者接入 LogstashFluentd 这类数据管道,最终落地到 ELK(Elasticsearch、Logstash、Kibana)体系中进行存储和可视化。

日志级别的设置,建议开发环境用 debug,生产环境用 info/warn/error 分层输出,这样既能过滤冗余信息,又能方便告警。

二 应用内日志配置示例

纸上谈兵不如直接看代码。先看一个使用 Winston 输出到控制台与文件的经典配置,特别之处在于它按错误和全量做了分离:

// logger.js
const { createLogger, format, transports } = require('winston');

const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    format.json()
  ),
  transports: [
    new transports.File({ filename: 'logs/error.log', level: 'error' }),
    new transports.File({ filename: 'logs/combined.log' }),
    new transports.Console()
  ]
});

module.exports = logger;

如果希望日志按天滚动并自动压缩,可以引入 winston-daily-rotate-file 插件:

// logger-daily.js
const { createLogger, format, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    format.printf(({ timestamp, level, message }) => {
      return `[${timestamp}] ${level.toUpperCase()}: ${message}`;
    })
  ),
  transports: [
    new DailyRotateFile({
      filename: 'logs/app-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true,
      maxSize: '20m',
      maxFiles: '14d'
    })
  ]
});

module.exports = logger;

再看一个 Log4js 的配置,同样支持按时间滚动:

// logger-log4js.js
const log4js = require('log4js');

log4js.configure({
  appenders: {
    out: { type: 'console' },
    app: {
      type: 'dateFile',
      filename: 'logs/app',
      pattern: '.yyyy-MM-dd.log',
      compress: true,
      alwaysIncludePattern: true
    }
  },
  categories: {
    default: { appenders: ['out', 'app'], level: 'info' }
  }
});

const logger = log4js.getLogger();
module.exports = logger;

这里有个建议:生产环境优先输出 JSON 格式到文件,这样后续检索和聚合会很方便;控制台输出则留给本地开发和调试就好。

三 系统级日志轮转与保留策略

对于使用 systemd 或长期运行的进程,logrotate 是系统级的可靠选择。配置起来很简单:

创建一个配置文件 /etc/logrotate.d/nodejs_app,内容如下:

/path/to/your/nodejs/app/logs/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 root root
}

然后手动测试一下:sudo logrotate -f /etc/logrotate.d/nodejs_app。在 CentOS 上,logrotate 默认由 cron.daily 每日触发,所以不需要额外设置定时任务。

那么,到底该用应用内轮转还是系统级轮转?这取决于场景:

  • 应用内轮转(如 winston-daily-rotate-file)控制更精细,可以同时按大小和日期双重管理,适合容器化或多实例部署。
  • 系统级轮转(logrotate)与操作系统集成度高,运维统一,适合物理机或虚拟机上的长期服务。

四 进程管理与集中式日志

PM2 是 Node.js 进程管理的利器,它的日志管理功能也很实用:

  • 安装:npm install pm2 -g
  • 启动应用:pm2 start app.js --name my-node-app
  • 查看日志:pm2 logs my-node-app
  • 开启日志轮转(通过内置插件):
    • pm2 set pm2-logrotate:max_size 10M
    • pm2 set pm2-logrotate:retain 7

如果想将日志发送到远程 rsyslog 服务器,流程也很清晰。首先在服务端启用 UDP 514 端口:编辑 /etc/rsyslog.conf,取消注释并启动模块:

module(load="imudp")
input(type="imudp" port="514")

然后重启服务:sudo systemctl restart rsyslog

在客户端,通过 Winston 的 Syslog 插件发送日志:

const { createLogger, transports } = require('winston');
const SyslogTransport = require('winston-syslog').SyslogTransport;

const logger = createLogger({
  level: 'info',
  transports: [
    new SyslogTransport({
      host: '192.0.2.10', // 远程 rsyslog 地址
      port: 514,
      protocol: 'udp4'
    })
  ]
});

再往上走一步,就是搭建完整的集中式分析平台了:日志从 Logstash 流入 Elasticsearch,最后在 Kibana 中实现检索、聚合与可视化。这套组合拳在大型系统中几乎是标配。

五 日常运维与最佳实践

最后,总结几条生产环境下的经验,值得记下来:

  • 目录与权限:统一把日志放到 /var/log/yourapp/,目录权限设为 0755,日志文件设为 0640,属主设置为运行用户(如 nodejsappuser)。
  • 日志级别与环境:开发用 debug,生产用 info/warn/error。通过环境变量来控制日志级别和输出目标,灵活又安全。
  • 结构化与采样:优先输出 JSON 格式,关键路径加上 requestId/traceId。高并发场景下,对 debug/trace 级别的日志做采样,避免性能抖动。
  • 性能与可靠性:尽量使用异步或缓冲写入,避免同步日志阻塞事件循环。但关键错误日志建议同步落盘,确保不丢失。
  • 保留与合规:根据业务和合规要求设置保留周期,常见的是 7 到 90 天,并定期清理和归档。
  • 监控与告警:对 error 关键字、日志写入速率异常、磁盘使用率等设置监控和告警,别等磁盘写满才去处理。

说到底,日志管理这件事,工具选对、配置做细、规则定好,后续运维就会省心很多。

本文转载于:https://www.yisu.com/ask/80612217.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注