Java 应用日志如果持续增长,最先出问题的往往不是排障,而是磁盘空间和日志可读性。在 Ubuntu 环境里,logrotate已经把按周期轮转、保留旧文件和压缩归档这些基础能力准备好了,关键在于把规则写对、验证跑通。下面按实际操作顺序梳理一遍,帮助你判断配置该怎么改、执行后应该看到什么结果。
先确认 Ubuntu 是否已安装 logrotate
大多数 Ubuntu 发行版默认已经带有 logrotate,但如果你使用的是精简镜像,最好还是先确认一下。没有安装时,先执行下面两条命令:
sudo apt-get update
sudo apt-get install logrotate
这一步的目的很简单:确保后续配置文件写完后,系统有可用的轮转工具可以直接执行。
为 Java 应用单独创建轮转规则
给单个 Java 应用单独写一个规则文件,通常比直接改全局配置更稳妥。Ubuntu 常见做法是把应用规则放进 /etc/logrotate.d/ 目录,例如新建一个名为 my-java-app 的文件:
sudo nano /etc/logrotate.d/my-java-app
打开后写入如下内容,日志路径需要替换成你自己的实际目录:
/path/to/your/java/app/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
}
这份规则的核心作用,是把指定目录下所有 .log 文件纳入统一轮转策略,避免某个应用日志长期无控制增长。
这几个参数分别在控制什么
/path/to/your/java/app/logs/*.log:指定需要处理的日志文件范围,*.log会匹配所有以.log结尾的文件。daily:表示每天执行一次分割。如果业务日志变化没那么快,也可以改成weekly或monthly。rotate 7:表示保留最近 7 份旧日志,超出的会被删除。这个数字通常要结合磁盘容量和排障窗口来定。compress:旧日志在轮转后会用 gzip 压缩,能明显减少占用空间。missingok:如果目标日志文件不存在,不报错退出,适合刚部署或暂时没有输出日志的应用。notifempty:日志文件为空时不执行轮转,避免生成没有意义的归档文件。create 640 root adm:轮转完成后自动创建新的空日志文件,并设定权限为640、属主为root、属组为adm。
其中,create 640 root adm 这类权限配置要特别注意。如果你的 Java 进程并不是以对应用户或组写日志,就需要按实际运行身份调整,否则新日志文件可能会出现应用无法继续写入的问题。
配置后先手动强制执行一次
规则写完后,不建议直接等系统定时任务触发。更稳妥的做法是先手动执行一次,确认语法、路径和权限都没有问题:

sudo logrotate -f /etc/logrotate.d/my-java-app
这里的 -f 表示强制执行,即使还没到下一次轮转周期,也会立即跑一遍。
如果命令执行没有报错,就到日志目录里检查结果。正常情况下,你应该能看到类似 xxx.log.1.gz 这样的文件,这说明旧日志已经被分割并压缩,新日志文件也应当重新创建完成。
后续自动执行机制与冲突检查
验证通过后,后面的工作基本就交给系统了。通常情况下,logrotate 会通过系统定时任务自动执行,常见场景是由 cron 在每天凌晨触发,因此不需要再手动重复处理。
不过在正式依赖这套规则前,最好再检查一次主配置文件 /etc/logrotate.conf。重点不是重写全局设置,而是确认默认轮转周期与应用单独规则之间没有明显冲突,避免你期望按天轮转,实际却被别的默认策略影响。
如果你的需求只是让 Java 日志按固定周期切分、保留最近若干份并压缩归档,那么 Ubuntu 自带的 logrotate 已经足够稳定,也几乎没有额外运维成本。真正需要仔细调整的,主要是日志路径、保留份数以及新文件权限这三个点。







