在Node.js應用程序中,日志輪轉是一種常見的做法,可以幫助管理日志文件的大小和數量,避免日志文件過大或過多導致磁盤空間不足。以下是幾種常見的日志輪轉配置方法:
winston
和 winston-daily-rotate-file
winston
是一個流行的日志庫,結合 winston-daily-rotate-file
可以實現日志的每日輪轉。
首先,安裝所需的包:
npm install winston winston-daily-rotate-file
然后,配置 winston
:
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!');
morgan
和 morgan-body
morgan
是一個HTTP請求日志中間件,結合 morgan-body
可以實現請求日志的輪轉。
首先,安裝所需的包:
npm install morgan morgan-body
然后,配置 morgan
:
const express = require('express');
const morgan = require('morgan');
const morganBody = require('morgan-body');
const fs = require('fs');
const path = require('path');
const app = express();
const accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), { flags: 'a' });
const errorLogStream = fs.createWriteStream(path.join(__dirname, 'error.log'), { flags: 'a' });
app.use(morgan('combined', { stream: accessLogStream }));
app.use(morganBody());
app.get('/', (req, res) => {
res.send('Hello, world!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
pino
和 pino-rotate
pino
是一個高性能的日志庫,結合 pino-rotate
可以實現日志的輪轉。
首先,安裝所需的包:
npm install pino pino-rotate
然后,配置 pino
:
const pino = require('pino');
const rotate = require('pino-rotate');
const logger = pino({
level: 'info',
transport: {
target: 'pino-rotate',
options: {
period: '1d',
path: 'application.log',
maxsize: '10m',
maxfiles: '7'
}
}
});
logger.info('Hello, world!');
logrotate
工具如果你在Linux系統上運行Node.js應用程序,可以使用 logrotate
工具來管理日志文件。
首先,創建一個 logrotate
配置文件:
sudo nano /etc/logrotate.d/myapp
然后,添加以下內容:
/path/to/your/application.log {
daily
missingok
rotate 14
compress
notifempty
create 640 root adm
}
最后,確保 logrotate
定期運行:
sudo systemctl enable logrotate
sudo systemctl start logrotate
通過以上幾種方法,你可以根據具體需求選擇合適的日志輪轉配置方式。