在 CentOS 上,Java 应用日志分割常见有几种方式,取决于你用的是哪种日志框架或运行方式。下面按最常见场景给你讲清楚。
如果你的 Java 项目使用 Logback,直接配置日志滚动即可。
logback.xml 示例:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/myapp/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>/var/log/myapp/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
✅ 效果:
<RollingFile name="RollingFile" fileName="/var/log/myapp/app.log"
filePattern="/var/log/myapp/app-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="%d %p %c{1.} %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingFile>
如果你的 Java 程序直接输出到文件(如 nohup java -jar app.jar > app.log)
vim /etc/logrotate.d/myapp
内容:
/var/log/myapp/app.log {
daily
rotate 30
size 100M
copytruncate
missingok
compress
notifempty
}
logrotate -f /etc/logrotate.d/myapp
✅ copytruncate 很关键:
不重启 Java 进程就能切割日志
Spring Boot 默认支持 Logback:
logging:
file:
name: /var/log/myapp/app.log
logback:
rollingpolicy:
max-file-size: 100MB
max-history: 30
rm 日志
| 场景 | 推荐方案 |
|---|---|
| Spring Boot | Logback / log4j2 |
| 老项目 | logrotate |
| Docker | 容器日志 |
| 微服务 | 集中日志(ELK) |
如果你愿意,可以告诉我:
我可以给你精准配置。