Java 应用只要持续写日志,磁盘空间迟早会成为问题。对多数 Linux 服务器来说,logrotate 是最直接、也最稳定的日志分割工具:它能按周期切分日志、保留历史文件、自动压缩旧文件。下面按实际操作顺序,把安装、配置、验证和定时执行几个关键步骤梳理清楚,方便你快速落地,也能知道每个参数为什么这样写。
为什么用 logrotate 管理 Java 日志
在 Linux 系统里,logrotate 通常已经预装,适合用来处理 Java 应用产生的 .log 文件。它的核心价值主要有三点:
- 按天或按周期切分日志,避免单个文件持续膨胀。
- 保留固定数量的历史日志,便于排障和审计。
- 自动压缩旧日志,减少磁盘占用。
如果你的 Java 服务长期运行、日志增长较快,这类基础配置通常就足够应对日常运维场景。
先确认 logrotate 是否已安装
大多数 Linux 发行版会自带 logrotate。如果系统里没有,可以直接通过包管理器安装。以 Debian/Ubuntu 系为例,执行下面的命令:
sudo apt-get install logrotate
安装完成后,就可以开始为 Java 应用单独编写一份日志分割配置。
为 Java 应用创建独立配置文件
通常做法是在 /etc/logrotate.d/ 目录下新建一个专属配置文件,便于按应用单独维护。文件名可以自定义,这里以 java_app 为例:
sudo nano /etc/logrotate.d/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:要分割的日志文件路径,支持通配符。daily:每天执行一次日志分割。rotate 7:保留最近 7 个旧日志文件。compress:对旧日志进行压缩,减少磁盘占用。missingok:日志文件不存在时不报错,继续执行。notifempty:日志为空时跳过本次分割。create 640 root adm:分割完成后创建新的日志文件,权限为 640,属主为 root,属组为 adm。
这组参数覆盖了常见的生产环境需求:有保留策略,有压缩,有异常兜底,也明确了新日志文件的权限归属。
配置完成后先手动测试一次
写完配置后,不建议直接等定时任务触发,最好先手动强制执行一次,确认规则是否生效:

sudo logrotate -f /etc/logrotate.d/java_app
执行后重点检查两件事:
- 原始日志是否已经被切分。
- 是否生成了带日期后缀或压缩后的
.gz文件。
如果这一步正常,说明路径、权限和分割规则基本没有问题,后续再交给系统自动执行会更稳妥。
确认 logrotate 会自动运行
logrotate 一般会通过系统的定时任务每天运行一次。在很多 Linux 系统里,你可以通过下面这个文件确认它是否已接入日常任务:
/etc/cron.daily/logrotate
如果只是临时想手动执行整套全局配置,也可以直接运行:
sudo logrotate -f /etc/logrotate.conf
这条命令会按系统总配置触发一次日志轮转,适合排查全局配置是否正常生效。
哪些场景下需要继续调整参数
上面的示例已经能完成一套基础可用的 Java 日志分割方案,但如果你的业务日志增长更快,或者保留要求更严格,还可以继续调整 logrotate 规则。例如:
- 按大小分割,而不是按天分割。
- 改成按周分割,减少切分频率。
- 调整压缩方式或保留数量,平衡排障需求和磁盘成本。
实际选项怎么定,取决于日志增长速度、磁盘容量,以及你希望保留多久的历史日志。







