发布于2026-07-26 阅读(0)
扫一扫,手机访问
在Linux环境下管理Ja vaScript应用,日志轮转是个绕不开的话题。如果日志文件无限增长,迟早会把磁盘撑爆,到时候排查问题都找不到头绪。所以,提前把日志轮转机制配好,是运维工作中的基本操作。

具体怎么搞?这取决于你的应用是怎么记录日志的。下面这几种主流方案,基本能覆盖大多数场景。
logrotate 搞定通用轮转说到日志轮转,logrotate 绝对是个绕不开的老牌工具。它是个系统级工具,专门用来管理日志文件的轮转、压缩和清理。而且它不挑语言,只要你的应用会把日志写入文件,就能用它来管。
好,操作步骤来看:
先确认系统里有没有logrotate,没有的话装一个:
sudo apt-get install logrotate # Debian/Ubuntu
sudo yum install logrotate # CentOS/RHEL
然后,创建一个专门的配置文件。logrotate 的配置文件通常放在 /etc/logrotate.d/ 目录下,每个应用一个文件,清晰明了。
sudo nano /etc/logrotate.d/myapp
在文件里写入配置规则。这里给一个很常用的模版:
/path/to/your/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root adm
}
每项配置的含义很直观:
daily:每天轮转一次。rotate 7:保留最近7个轮转后的日志文件,更早的自动删除。compress:用gzip压缩旧日志,省空间。delaycompress:这次轮转不立即压缩,等下次轮转再压缩。这个选项挺实用,能避免刚轮转完的文件还在被某些进程读取,压缩后导致读取失败。missingok:日志文件要是丢了,也不报错,不中断任务。notifempty:日志文件为空就不轮转,避免频繁生成空日志。create 640 root adm:轮转后自动创建新的日志文件,并指定权限和属主。配完记得测试一下,确保语法没问题:
sudo logrotate -f /etc/logrotate.d/myapp
加上 -f 参数是强制轮转,用来验证配置是否生效。
pm2如果你用的是Node.js应用,那pm2可能是更省心的选择。它作为进程管理工具,本身就内置了日志管理功能,可以自动处理轮转。
来,看看怎么配:
先确保全局安装了pm2:
npm install pm2 -g
启动应用,并指定日志输出路径:
pm2 start app.js --name myapp
pm2 logs myapp --lines 1000 # 设置日志显示行数
pm2 sa ve # 保存当前进程列表,方便开机自启
pm2 默认的日志轮转策略是够用的,但如果你想要更精细的控制,可以编辑 ecosystem.config.js 文件。这里是一个典型的配置:
module.exports = {
apps: [{
name: 'myapp',
script: 'app.js',
out_file: '/path/to/your/logs/myapp.out',
error_file: '/path/to/your/logs/myapp.error.log',
log_date_format: 'YYYY-MM-DD HH:mm Z',
time: true,
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}]
};
你可以在这里分别指定标准输出日志和错误日志的路径,还能加上时间戳,让每条日志都带上记录时间,这对排查问题特别有帮助。
改完配置,重启应用让它生效:
pm2 restart myapp
当然,如果前面两种方案无法满足你的特殊需求——比如你想按日志大小而不是按天轮转,或者想执行一些额外的清理操作——那自己写个脚本也不是什么难事。
这里给一个简单的Shell脚本示例:
#!/bin/bash
LOG_DIR="/path/to/your/logs"
LOG_FILE="myapp.log"
# 检查日志文件是否存在
if [ -f "$LOG_DIR/$LOG_FILE" ]; then
# 获取当前日期,作为备份文件名的一部分
DATE=$(date +%Y-%m-%d)
# 重命名日志文件,完成轮转
mv "$LOG_DIR/$LOG_FILE" "$LOG_DIR/$LOG_FILE-$DATE"
fi
# 创建一个新的空日志文件
touch "$LOG_DIR/$LOG_FILE"
# 压缩旧的日志文件,可选
find "$LOG_DIR" -name "*.log-*" -type f -exec gzip {} \;脚本写好后,需要配合系统的定时任务来执行。用 cron 是最常见的做法:
crontab -e在打开的编辑器中,加入一行:
0 0 * * * /path/to/your/logrotate_script.sh这行配置的意思是:每天午夜零点,准时执行这个脚本。
以上三种方法,基本覆盖了从简单到复杂的各种需求。对于大多数团队来说,logrotate 就足够用了,简单高效;如果本身就是Node.js的生态,pm2 的无缝集成更是加分项;而自定义脚本则提供了最大的灵活性,适合那些不走寻常路的场景。选哪种,就看你的应用环境和运维习惯。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8