在Node.js应用程序中,日志轮转和压缩是重要的维护任务,有助于管理日志文件的大小和数量,同时节省存储空间。以下是一些常用的方法和工具来实现日志轮转与压缩:
winston
和 winston-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!');
pino
和 pino-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!');
morgan
和 morgan-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系统怎么修改用户所属组