在Ubuntu系统中,JavaScript应用程序(如Node.js)的日志通常存储在/var/log目录或其子目录下(如/var/log/nodejs/、/var/log/npm/)。为节省磁盘空间,可通过日志轮转+压缩的方式自动化管理日志文件,以下是具体方法:
logrotate是Ubuntu自带的日志管理工具,可定期轮转、压缩、删除旧日志文件,适用于大多数JavaScript应用(如Node.js)。
Ubuntu系统默认安装logrotate,若未安装,可通过以下命令安装:
sudo apt-get update && sudo apt-get install logrotate
在/etc/logrotate.d/目录下新建配置文件(如javascript-logs),用于定义JavaScript日志的轮转规则:
sudo nano /etc/logrotate.d/javascript-logs
在配置文件中添加以下内容(根据实际日志路径调整):
/var/log/js/*.log { # 匹配/var/log/js目录下所有.log文件
daily # 每天轮转一次(可选:weekly/monthly)
rotate 7 # 保留最近7个轮转日志(可根据磁盘空间调整)
compress # 使用gzip压缩旧日志(生成.log.gz文件)
delaycompress # 延迟压缩(当前轮转的日志不压缩,下次轮转时再压缩,避免压缩失败)
missingok # 若日志文件不存在,不报错
notifempty # 若日志文件为空,不进行轮转
create 0640 root adm # 创建新日志文件,权限0640,属主root,属组adm
}
参数说明:
compress:启用gzip压缩,旧日志会生成.gz文件(如app.log.1.gz);delaycompress:避免压缩当前正在写入的日志,降低出错概率;rotate 7:保留7个轮转日志,超过的自动删除,节省空间。手动触发logrotate,验证配置是否正确:
sudo logrotate -f /etc/logrotate.d/javascript-logs
执行后,检查/var/log/js/目录,应看到压缩后的旧日志文件(如app.log.1.gz)。
logrotate默认通过/etc/cron.daily/logrotate脚本每天自动运行,无需额外配置。
若不想依赖系统工具,可在JavaScript应用中通过日志库(如Winston、log4js)直接配置日志压缩。
安装Winston及压缩插件:
npm install winston winston-daily-rotate-file
配置日志轮转与压缩(在应用代码中添加):
const winston = require('winston');
require('winston-daily-rotate-file');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.DailyRotateFile({
filename: '/var/log/js/app.log', // 当前日志文件路径
dirname: '/var/log/js', // 日志目录
datePattern: 'yyyy-MM-dd', // 轮转日期格式(按天分割)
zippedArchive: true, // 启用压缩(生成.gz文件)
maxSize: '20m', // 单个日志文件最大20MB(可选)
maxFiles: '7d', // 保留7天日志(可选)
createSymlink: true, // 创建符号链接(指向最新日志)
symlinkName: 'app-current.log' // 符号链接名称
})
]
});
// 示例日志记录
logger.info('Application started');
说明:
zippedArchive: true:自动压缩旧日志;maxSize:当日志文件达到指定大小时轮转;maxFiles:保留指定天数的日志。安装log4js:
npm install log4js
配置日志轮转与压缩:
const log4js = require('log4js');
log4js.configure({
appenders: {
app: {
type: 'file',
filename: '/var/log/js/app.log',
pattern: '.yyyy-MM-dd', // 轮转日期格式
alwaysIncludePattern: true, // 文件名包含日期
daysToKeep: 7, // 保留7天日志
compress: true // 启用压缩
}
},
categories: {
default: { appenders: ['app'], level: 'info' }
}
});
const logger = log4js.getLogger();
logger.info('Application started');
/var/log/js/)有正确的写入权限(通常为root:adm),避免应用无法写入日志。/var/log/nodejs/app.log、/home/user/app/logs/combined.log)。sudo logrotate -f /etc/logrotate.d/javascript-logs),确保不会遗漏日志。通过上述方法,可有效压缩Ubuntu下JavaScript日志,释放磁盘空间,同时保留必要的历史日志用于排查问题。