Node.js日志轮转如何配置最佳

736
2025/3/31 12:32:51
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在Node.js应用程序中,日志轮转是一种重要的策略,用于管理日志文件的大小和数量,以防止磁盘空间不足。以下是配置Node.js日志轮转的最佳实践:

1. 使用winstonpino等日志库

winstonpino是Node.js中流行的日志库,它们都支持日志轮转。

使用winston

const winston = require('winston');
const { createLogger, format, transports } = winston;
const { combine, timestamp, printf } = format;

const myFormat = printf(({ level, message, timestamp }) => {
  return `${timestamp} ${level}: ${message}`;
});

const logger = createLogger({
  format: combine(
    timestamp(),
    myFormat
  ),
  transports: [
    new transports.File({ filename: 'error.log', level: 'error' }),
    new transports.File({ filename: 'combined.log' })
  ]
});

// 日志轮转配置
const transport = new transports.DailyRotateFile({
  filename: 'application-%DATE%.log',
  datePattern: 'YYYY-MM-DD-HH',
  zippedArchive: true,
  maxSize: '20m',
  maxFiles: '14d'
});

logger.add(transport);

使用pino

const pino = require('pino');
const { createLogger } = pino;
const { prettyPrint } = require('pino-pretty');

const logger = createLogger({
  level: 'info',
  transport: {
    target: 'pino-pretty',
    options: {
      colorize: true,
      translateTime: 'SYS:standard'
    }
  }
});

// 日志轮转配置
const fs = require('fs');
const path = require('path');
const { createWriteStream, format } = require('pino');
const { combine, timestamp } = format;

const logStream = createWriteStream(path.join(__dirname, 'logs', 'application.log'), { flags: 'a' });
const logger = createLogger({
  level: 'info',
  transport: {
    target: logStream,
    formatter: combine(
      timestamp(),
      format.json()
    )
  }
});

// 使用`pino-rotate`进行日志轮转
const pinoRotate = require('pino-rotate');
pinoRotate({
  period: '1d',
  path: path.join(__dirname, 'logs', 'application.log'),
  size: '20m',
  compress: true,
  rotate: 14
});

2. 配置日志文件大小和数量

  • maxSize: 设置单个日志文件的最大大小。
  • maxFiles: 设置保留的日志文件数量。

3. 使用压缩

  • zippedArchive: 是否压缩旧的日志文件。
  • compress: 是否压缩旧的日志文件(与zippedArchive类似)。

4. 定期轮转

  • period: 设置日志文件的轮转周期,例如每天、每周等。
  • datePattern: 设置日期格式,用于生成轮转后的日志文件名。

5. 监控和报警

  • 设置监控系统(如Prometheus、Grafana)来监控日志文件的大小和数量。
  • 配置报警系统,在日志文件超过阈值时发送警报。

6. 日志文件的存储位置

  • 将日志文件存储在单独的目录中,以便于管理和备份。
  • 确保日志文件的存储位置有足够的磁盘空间。

7. 定期清理

  • 定期清理旧的日志文件,以避免磁盘空间不足。

通过以上配置,可以有效地管理Node.js应用程序的日志文件,确保系统的稳定性和可维护性。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: Linux Editor的性能对比