在 CentOS 上,Java 应用日志的“轮转(rotate)”常见有 3 种做法,取决于你用什么方式运行 Java 以及用什么日志框架。
适合: 任何 Java 程序(不管用啥日志框架),只要日志写到文件。
假设日志文件是:
/opt/app/logs/app.log
新建配置文件:
sudo vi /etc/logrotate.d/app-java
内容示例:
/opt/app/logs/app.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
daily:每天轮转rotate 7:保留 7 份compress:压缩旧日志copytruncate:关键,不重启 Java 也能继续写(Java 不重新打开文件)missingok:日志不存在也不报错sudo logrotate -d /etc/logrotate.d/app-java
强制执行一次:
sudo logrotate -f /etc/logrotate.d/app-java
✅ 90% 的 CentOS Java 项目用这个就够
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/opt/app/logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/opt/app/logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
✅ 不需要 logrotate
✅ 不需要重启
<RollingFile name="RollingFile" fileName="/opt/app/logs/app.log"
filePattern="/opt/app/logs/app-%d{yyyy-MM-dd}.log">
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile>
如果是 systemd 启动的 Java:
journalctl -u yourapp
但 journal 不适合大日志,一般还是写文件 + logrotate。
copytruncatecopytruncatecompressrotate 数量| 场景 | 推荐方式 |
|---|---|
| 老项目 / 未知日志框架 | logrotate + copytruncate |
| Spring Boot | Logback 自带 |
| 微服务 | Log4j2 / Logback |
| 容器 | stdout + 外部采集 |
如果你愿意,可以告诉我:
我可以直接给你一份 可用配置。