温馨提示×

Java日志CentOS如何滚动

小樊
51
2026-08-30 07:37:04
栏目: 编程语言

CentOS 上让 Java 日志滚动,常见有 三种主流方式。下面按推荐程度给你讲清楚,并附上可直接用的配置示例。


✅ 方式一:使用 logback(最推荐,Java 项目最常用)

如果你用的是 Spring Boot / logback强烈建议用 logback 自带的滚动策略,而不是依赖系统。

示例:logback-spring.xml

<configuration>

    <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>
            <!-- 保留 30 天 -->
            <maxHistory>30</maxHistory>
            <!-- 总大小限制(可选) -->
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>

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

</configuration>

✅ 优点

  • 不依赖系统
  • 可按 时间 / 大小 / 组合 滚动
  • 生产环境最稳定

✅ 方式二:使用 log4j2(次之)

如果你用的是 log4j2

<RollingFile name="FileAppender"
             fileName="/var/log/myapp/app.log"
             filePattern="/var/log/myapp/app-%d{yyyy-MM-dd}-%i.log.gz">
    <PatternLayout>
        <Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n</Pattern>
    </PatternLayout>
    <Policies>
        <TimeBasedTriggeringPolicy interval="1"/>
        <SizeBasedTriggeringPolicy size="200MB"/>
    </Policies>
    <DefaultRolloverStrategy max="30"/>
</RollingFile>

✅ 方式三:CentOS 系统级 logrotate(兜底方案)

适合:

  • 老项目
  • 第三方 Java 程序
  • 你无法改日志框架

1️⃣ 创建 logrotate 配置

sudo vim /etc/logrotate.d/myapp

2️⃣ 示例配置

/var/log/myapp/app.log {
    daily
    rotate 30
    size 200M
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
}

3️⃣ 参数说明

参数 作用
daily 每天滚动
rotate 30 保留 30 份
size 200M 超过 200M 也滚
compress 压缩旧日志
copytruncate 不重启 JVM

4️⃣ 测试是否生效

sudo logrotate -vf /etc/logrotate.d/myapp

❗ 重要注意事项(Java 项目容易踩坑)

❌ 不要直接删日志文件

JVM 打开的文件句柄不会释放,会导致磁盘不释放。

✅ 正确做法:

  • logback / log4j2 自动滚动
  • 或使用 copytruncate

✅ 推荐方案总结

场景 推荐
Spring Boot ✅ logback
大型系统 ✅ log4j2
第三方 Java ✅ logrotate
生产环境 ❌ 手写脚本

✅ 快速判断你该用哪个

告诉我:

  1. 用的是 Spring Boot / 普通 Java / 第三方程序
  2. 当前日志框架?(logback / log4j2 / 无)
  3. 日志路径

我可以直接帮你写 可复制使用的完整配置

0