温馨提示×

centos java日志怎么轮转

小樊
45
2026-09-03 01:37:26
栏目: 编程语言

在 CentOS 上,Java 应用日志的“轮转(rotate)”常见有 3 种做法,取决于你用什么方式运行 Java 以及用什么日志框架。


一、使用 logrotate(最通用,推荐)

适合: 任何 Java 程序(不管用啥日志框架),只要日志写到文件。

1. 示例:为 Java 日志配置 logrotate

假设日志文件是:

/opt/app/logs/app.log

新建配置文件:

sudo vi /etc/logrotate.d/app-java

内容示例:

/opt/app/logs/app.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
}

参数说明

  • daily:每天轮转
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • copytruncate:关键,不重启 Java 也能继续写(Java 不重新打开文件)
  • missingok:日志不存在也不报错

2. 测试是否生效

sudo logrotate -d /etc/logrotate.d/app-java

强制执行一次:

sudo logrotate -f /etc/logrotate.d/app-java

✅ 90% 的 CentOS Java 项目用这个就够


二、Java 日志框架自带轮转(推荐新项目)

1. Logback(最常用)

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

✅ 不需要 logrotate
✅ 不需要重启


2. Log4j2

<RollingFile name="RollingFile" fileName="/opt/app/logs/app.log"
             filePattern="/opt/app/logs/app-%d{yyyy-MM-dd}.log">
    <Policies>
        <TimeBasedTriggeringPolicy />
    </Policies>
</RollingFile>

三、systemd 服务 + Java(不推荐单独用)

如果是 systemd 启动的 Java:

journalctl -u yourapp

但 journal 不适合大日志,一般还是写文件 + logrotate。


四、常见坑(非常重要)

❌ Java 不释放文件

  • 用 copytruncate
  • 或日志框架自带 rotate

❌ 日志一直写旧文件

  • 没用 copytruncate
  • 或 Java 没支持 reopen

❌ 磁盘爆了

  • 没开 compress
  • 没限制 rotate 数量

总结建议

场景 推荐方式
老项目 / 未知日志框架 logrotate + copytruncate
Spring Boot Logback 自带
微服务 Log4j2 / Logback
容器 stdout + 外部采集

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

  • Java 启动方式(jar / tomcat / systemd)
  • 日志文件路径
  • 用的日志框架

我可以直接给你一份 可用配置。

0 踩