在 CentOS 上,Java 应用的日志切割常见有 3 种主流方案,你可以根据项目情况选择。
在 logback.xml 中配置 RollingFileAppender:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/myapp/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/myapp/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
✅ 按天切割
✅ 自动删除 30 天前日志
<RollingFile name="RollingFile" fileName="/var/log/myapp/app.log"
filePattern="/var/log/myapp/app-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="%d %p %c{1.} %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingFile>
适合 标准输出 / 未做切割的日志文件
vim /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 30
compress
missingok
notifempty
copytruncate
}
copytruncate:不重启 Java 进程即可切割compress:压缩旧日志rotate 30:保留 30 天logrotate -f /etc/logrotate.d/myapp
nohup java -jar app.jar | cronolog /var/log/myapp/app.%Y-%m-%d.log &
⚠️ 已逐渐淘汰,不推荐新项目使用
✅ Java 程序 不能直接 mv 日志文件(会导致继续写旧文件)
✅ 推荐顺序:
如果你愿意,可以告诉我:
我可以给你一份直接可用的配置。