在 CentOS 上“分割 Java 日志”,通常有两种常见场景:
下面按常见方式说明。
logback.xml 示例:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/data/logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/data/logs/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
✅ 效果:
log4j2.xml:
<RollingFile name="RollingFile"
fileName="/data/logs/app.log"
filePattern="/data/logs/app-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="%d %p %c{1.} %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingFile>
vi /etc/logrotate.d/java-app
示例:
/data/logs/app.log {
daily
rotate 30
size 100M
copytruncate
missingok
compress
notifempty
}
参数说明:
copytruncate:不重启 Java 进程直接切割(常用)compress:压缩旧日志size 100M:超过 100M 才切logrotate -f /etc/logrotate.d/java-app
cat /var/lib/logrotate/logrotate.status
split -b 100M app.log app.log.part-
或按行:
split -l 100000 app.log app.log.part-
Tomcat 默认 不会自动分割 catalina.out
✅ 推荐方案:
logrotate + copytruncatelogback 接管日志| 场景 | 推荐方式 |
|---|---|
| Spring Boot | logback / log4j2 |
| nohup.out | logrotate |
| Tomcat | logrotate |
| 已生成大文件 | split 临时处理 |
如果你能告诉我:
我可以直接给你可用配置文件。