Node.js日志轮转与压缩方法

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

在Node.js应用程序中,日志轮转和压缩是重要的维护任务,有助于管理日志文件的大小和数量,同时节省存储空间。以下是一些常用的方法和工具来实现日志轮转与压缩:

1. 使用 winstonwinston-daily-rotate-file

winston 是一个流行的日志库,结合 winston-daily-rotate-file 可以实现日志的每日轮转。

安装依赖

npm install winston winston-daily-rotate-file

配置示例

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

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

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    transport
  ]
});

logger.info('Hello, world!');

2. 使用 pinopino-rotate

pino 是一个高性能的日志库,结合 pino-rotate 可以实现日志的轮转。

安装依赖

npm install pino pino-rotate

配置示例

const pino = require('pino');
const rotate = require('pino-rotate');

const logger = pino({
  level: 'info'
});

rotate({
  period: '1d', // 每天轮转一次
  path: 'logs/', // 日志文件存放路径
  maxsize: '20m', // 单个日志文件最大大小
  compress: true // 是否压缩旧日志文件
});

logger.info('Hello, world!');

3. 使用 morganmorgan-body

morgan 是一个HTTP请求日志中间件,结合 morgan-body 可以记录请求体日志,并使用其他工具进行轮转和压缩。

安装依赖

npm install morgan morgan-body

配置示例

const express = require('express');
const morgan = require('morgan');
const morganBody = require('morgan-body');
const fs = require('fs');
const path = require('path');
const { createLogger, format, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

const app = express();

// 创建日志目录
const logDir = path.join(__dirname, 'logs');
if (!fs.existsSync(logDir)) {
  fs.mkdirSync(logDir);
}

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

const logger = createLogger({
  level: 'info',
  format: format.combine(
    format.timestamp(),
    format.json()
  ),
  transports: [
    transport
  ]
});

// 使用morgan记录访问日志
app.use(morgan('combined', { stream: { write: message => logger.info(message.trim()) } }));

// 使用morgan-body记录请求体日志
app.use(morganBody());

app.get('/', (req, res) => {
  res.send('Hello, world!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

总结

以上方法展示了如何在Node.js应用程序中实现日志轮转和压缩。选择合适的日志库和工具,根据具体需求进行配置,可以有效地管理日志文件,确保应用程序的稳定运行。

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

推荐阅读: linux系统怎么修改用户所属组