centos

Node.js在CentOS上的日志管理方法

小樊
35
2025-12-05 23:22:32
栏目: 编程语言

Node.js 在 CentOS 上的日志管理方法

一 核心原则与选型

二 应用内日志配置示例

// 安装: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 winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
    new DailyRotateFile({
      filename: 'logs/combined-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true,
      maxFiles: '14d'
    }),
    new winston.transports.Console()
  ]
});

logger.info('服务启动', { port: 3000 });
logger.error('数据库错误', { err: new Error('timeout') });
// 安装:npm i pino pino-pretty
// 运行时:node app.js | pino-pretty
const pino = require('pino')();
pino.info({ event: 'user.login', userId: 42 }, '用户登录成功');
// 安装:npm i morgan
const express = require('express');
const morgan = require('morgan');
const app = express();
app.use(morgan('combined')); // 或 'tiny' / 'dev'
npm i -g pm2
pm2 start app.js --name myapp
pm2 logs myapp        # 实时查看
pm2 monit             # 资源与日志概览

以上示例覆盖了常用的库选型、分级、结构化输出、按天轮转与 PM2 日志查看。

三 系统级日志轮转与 Syslog 传输

sudo tee /etc/logrotate.d/nodejsapp <<'EOF'
/path/to/your/nodejsapp/logs/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 0640 nodejs nodejs
    copytruncate
}
EOF
# 说明:
# daily        每天轮转;rotate 7 保留7份;compress 压缩旧日志
# missingok     日志不存在时不报错;notifempty 空文件不轮转
# create       轮转后创建新文件并设定属主属组(示例为 nodejs:nodejs)
# copytruncate  复制后截断原文件,适用于持续写入的进程(避免重启应用)
# 安装与启用
sudo yum install -y rsyslog
sudo systemctl enable --now rsyslog

# 编辑 /etc/rsyslog.conf,启用 UDP 模块并添加转发规则
# 取消注释:
# module(load="imudp")
# input(type="imudp" port="514")
# 添加:
*.* @192.0.2.10:514   # 将日志发送到远程 Syslog 服务器 192.0.2.10:514

sudo systemctl restart rsyslog
// 安装:npm i winston-syslog
const winston = require('winston');
const SyslogTransport = require('winston-syslog').SyslogTransport;

const logger = winston.createLogger({
  level: 'info',
  transports: [
    new SyslogTransport({
      host: '192.0.2.10',
      port: 514,
      protocol: 'udp4'
    })
  ]
});

以上覆盖了文件轮转与 Syslog 远程传输的常用做法。

四 集中式日志与监控告警

五 排错与运维要点

# PM2 实时日志
pm2 logs myapp

# 按时间查看系统日志
journalctl -u myapp.service -S "2025-12-01" -U "2025-12-05"

# 关键字检索
grep -i "error" /path/to/your/nodejsapp/logs/*.log

# 查看轮转状态(需安装 logrotate 的 daily 任务)
sudo logrotate -d /etc/logrotate.d/nodejsapp   # 干跑
sudo logrotate -f /etc/logrotate.d/nodejsapp   # 强制执行

以上要点可帮助定位常见权限、轮转、性能与检索问题。

0
看了该问题的人还看了