linux

Linux下Node.js日志如何实现自动化管理

小樊
44
2025-11-27 13:55:05
栏目: 编程语言

Linux下Node.js日志自动化管理

一 核心方案总览

二 方案一 logrotate系统级轮转与清理

/var/log/nodejs/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 root adm
    sharedscripts
    postrotate
        # 可选:通知应用重新打开日志文件(若应用支持信号)
        # kill -USR1 $(cat /var/run/nodeapp.pid) 2>/dev/null || true
    endscript
}

三 方案二 应用内日志库轮转

const winston = require('winston');
const { DailyRotateFile } = require('winston-daily-rotate-file');

const transport = new DailyRotateFile({
  filename: '/var/log/nodejs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  zippedArchive: true,
  maxSize: '20m',
  maxFiles: '14d'
});

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    winston.format.json()
  ),
  transports: [transport]
});
const pino = require('pino');
const rotate = require('pino-rotate');

rotate({
  period: '1d',
  path: '/var/log/nodejs',
  maxFiles: 7,
  gzip: true
});
const log4js = require('log4js');
log4js.configure({
  appenders: {
    app: {
      type: 'file',
      filename: 'logs/app.log',
      pattern: 'yyyy-MM-dd',
      alwaysIncludePattern: true,
      daysToKeep: 90,
      compress: true
    }
  },
  categories: { default: { appenders: ['app'], level: 'info' } }
});

四 方案三 PM2进程管理器的日志管理

module.exports = {
  apps: [{
    name: 'my-app',
    script: 'app.js',
    output: './logs/out.log',
    error: './logs/err.log',
    log: './logs/combined.log',
    log_date_format: 'YYYY-MM-DD HH:mm Z',
    log_rotation: {
      interval: '1d',
      size_limit: 10000000,
      line_limit: 200000
    }
  }]
};

五 方案四 集中化与远程日志

module(load="imudp")
input(type="imudp" port="514")
local0.* @192.0.2.10:514
const syslog = require('syslog');
syslog.openlog('nodejs-app', { facility: 'local0' });
syslog.syslog('Hello, world!');
syslog.closelog();

六 实践建议与运维要点

0
看了该问题的人还看了