温馨提示×

CentOS Java日志如何分割

小樊
45
2026-07-08 23:00:31
栏目: 编程语言

CentOS 上,Java 应用的日志分割通常有三种常见做法,按使用频率从高到低说明,并给出可直接用的配置示例


一、使用 logrotate(最推荐 ✅)

这是 CentOS 官方推荐、最常用、最稳定 的方式,适合 Tomcat、Spring Boot、普通 Java 程序

1️⃣ 示例:按天分割 Java 日志

假设日志文件是:

/opt/app/logs/app.log

2️⃣ 创建 logrotate 配置文件

sudo vim /etc/logrotate.d/app-log

内容如下(✅ 生产常用):

/opt/app/logs/app.log {
    daily
    rotate 30
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
    dateext
    dateformat -%Y%m%d
}

3️⃣ 参数说明

参数 作用
daily 每天分割
rotate 30 保留 30 份
compress 压缩旧日志
delaycompress 延迟压缩(防止 Java 占用)
copytruncate 复制后清空(不重启 Java)
dateext 使用日期后缀
missingok 日志不存在不报错

生成效果:

app.log
app.log-20260121.gz
app.log-20260120.gz

4️⃣ 测试是否生效

sudo logrotate -vf /etc/logrotate.d/app-log

查看日志是否被正确切割。


二、Java 应用内日志框架分割(Logback / Log4j2)

如果你使用的是 Spring Boot,推荐在 应用内部 做日志分割。


✅ Logback(Spring Boot 默认)

logback-spring.xml 示例:

<configuration>
    <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>30</maxHistory>
        </rollingPolicy>
    </appender>

    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>
</configuration>

✅ 优点:

  • 支持按时间 / 大小
  • 不依赖系统
  • 适合容器 / 云环境

✅ Log4j2 示例

<RollingFile name="FileAppender"
             fileName="/opt/app/logs/app.log"
             filePattern="/opt/app/logs/app-%d{yyyy-MM-dd}.log.gz">
    <PatternLayout pattern="%d %p %c - %m%n"/>
    <Policies>
        <TimeBasedTriggeringPolicy interval="1"/>
    </Policies>
    <DefaultRolloverStrategy max="30"/>
</RollingFile>

三、按大小 + 时间(进阶)

logrotate 按大小切割

size 100M
daily
rotate 30

或:

size 500M
rotate 7

四、常见坑(非常重要 ⚠️)

❌ 不要用 kill -9

会导致日志文件句柄异常。

✅ Java 日志一定用 copytruncate

否则 Java 可能继续写旧文件。

✅ 确保目录权限

sudo chown -R appuser:appuser /opt/app/logs

五、推荐方案总结 ✅

场景 推荐方案
CentOS 传统部署 logrotate + copytruncate
Spring Boot Logback / Log4j2
Docker / K8s 日志框架 + 标准输出
高并发 日志框架 + 异步

如果你愿意,可以告诉我:

  • ✅ Java 应用类型(Spring Boot / Tomcat / 普通 jar)
  • ✅ 日志路径
  • ✅ 是否容器运行

我可以帮你 定制一份完全可用的配置

0