在Ubuntu系统中,使用Node.js应用程序时,日志切割是一个重要的任务,可以帮助你管理日志文件的大小和数量,避免日志文件过大导致的磁盘空间不足问题。以下是一些常见的方法来切割Node.js应用程序的日志:
logrotate
工具logrotate
是一个系统工具,可以自动切割、压缩和删除旧日志文件。以下是如何配置 logrotate
来处理Node.js应用程序的日志:
安装 logrotate
(如果尚未安装):
sudo apt-get update
sudo apt-get install logrotate
创建 logrotate
配置文件:
在 /etc/logrotate.d/
目录下创建一个新的配置文件,例如 nodejs-app
:
sudo nano /etc/logrotate.d/nodejs-app
编辑配置文件: 在配置文件中添加以下内容:
/path/to/your/nodejs/app/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root adm
}
解释:
/path/to/your/nodejs/app/logs/*.log
:指定要切割的日志文件路径。daily
:每天切割一次日志。rotate 7
:保留最近7天的日志文件。compress
:压缩旧日志文件。delaycompress
:延迟压缩,直到下一次切割。missingok
:如果日志文件不存在,不会报错。notifempty
:如果日志文件为空,不进行切割。create 0640 root adm
:创建新日志文件时的权限和所有者。测试配置:
你可以手动测试 logrotate
配置是否正确:
sudo logrotate -f /etc/logrotate.d/nodejs-app
许多Node.js日志库(如 winston
、pino
等)都内置了日志切割功能。以下是使用 winston
的示例:
安装 winston
:
npm install winston
配置 winston
:
在你的Node.js应用程序中配置 winston
以支持日志切割:
const winston = require('winston');
const { combine, timestamp, printf } = winston.format;
const DailyRotateFile = require('winston-daily-rotate-file');
const myFormat = printf(({ level, message, timestamp }) => {
return `${timestamp} ${level}: ${message}`;
});
const logger = winston.createLogger({
format: combine(
timestamp(),
myFormat
),
transports: [
new DailyRotateFile({
filename: 'logs/application-%DATE%.log',
datePattern: 'YYYY-MM-DD-HH',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
})
]
});
logger.info('Hello, world!');
解释:
DailyRotateFile
:用于每天切割日志文件。filename
:日志文件的命名模式。datePattern
:日期格式。zippedArchive
:是否压缩旧日志文件。maxSize
:单个日志文件的最大大小。maxFiles
:保留的日志文件数量。通过以上方法,你可以有效地管理和切割Node.js应用程序的日志文件。