centos

CentOS环境下Node.js的日志管理

小樊
41
2025-11-26 04:31:14
栏目: 编程语言

CentOS环境下Node.js日志管理

一 核心要点与总体架构

二 应用内日志库配置示例

// 安装:npm i winston winston-daily-rotate-file
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    winston.format.json()
  ),
  transports: [
    new DailyRotateFile({
      filename: 'logs/error-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      level: 'error',
      zippedArchive: true,
      maxFiles: '14'
    }),
    new DailyRotateFile({
      filename: 'logs/combined-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true,
      maxFiles: '14'
    }),
    new winston.transports.Console({ format: winston.format.simple() })
  ]
});

logger.info('服务启动', { port: 3000 });
logger.error('数据库连接失败', { err: 'timeout' });

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

/path/to/your/nodejs/app/logs/*.log {
  daily
  rotate 7
  compress
  missingok
  notifempty
  create 0640 nodejs nodejs
  copytruncate
}
  1. 说明:
    • daily:按天轮转;rotate 7:保留 7 天;compress:压缩旧日志;missingok:日志不存在不报错;notifempty:空文件不轮转。
    • create 0640 nodejs nodejs:按实际运行用户/组设置权限与属主。
    • copytruncate:复制后截断原文件,避免应用句柄未释放导致轮转失败(若应用支持 reopen 信号,可改用 postrotate 发送信号)。
  2. 测试与生效:
    • 测试:sudo logrotate -d /etc/logrotate.d/nodejs_app(干跑)
    • 强制执行:sudo logrotate -f /etc/logrotate.d/nodejs_app
    • logrotate 默认由 cron 每日执行。

四 进程管理与系统日志查看

五 集中式日志与可视化

0
看了该问题的人还看了