温馨提示×

centos java日志怎么分割

小樊
56
2026-09-09 02:45:40
栏目: 编程语言

在 CentOS 上,Java 应用日志分割常见有几种方式,取决于你用的是哪种日志框架或运行方式。下面按最常见场景给你讲清楚。


一、使用 Logback(最推荐,Java 项目常用)

如果你的 Java 项目使用 Logback,直接配置日志滚动即可。

1️⃣ 按大小 + 天数分割(常用)

logback.xml 示例:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/var/log/myapp/app.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>/var/log/myapp/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <maxFileSize>100MB</maxFileSize>
        <maxHistory>30</maxHistory>
        <totalSizeCap>10GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
    </encoder>
</appender>

✅ 效果:

  • 每天一个日志
  • 超过 100MB 自动切分
  • 保留 30 天

二、使用 Log4j2(也很常见)

log4j2.xml 示例

<RollingFile name="RollingFile" fileName="/var/log/myapp/app.log"
             filePattern="/var/log/myapp/app-%d{yyyy-MM-dd}-%i.log">
    <PatternLayout pattern="%d %p %c{1.} %m%n"/>
    <Policies>
        <TimeBasedTriggeringPolicy interval="1"/>
        <SizeBasedTriggeringPolicy size="100 MB"/>
    </Policies>
    <DefaultRolloverStrategy max="30"/>
</RollingFile>

三、使用 logrotate(通用,不依赖 Java 框架)

如果你的 Java 程序直接输出到文件(如 nohup java -jar app.jar > app.log)

1️⃣ 创建 logrotate 配置

vim /etc/logrotate.d/myapp

内容:

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

2️⃣ 手动测试

logrotate -f /etc/logrotate.d/myapp

✅ copytruncate 很关键:
不重启 Java 进程就能切割日志


四、Spring Boot 项目(最简方案)

Spring Boot 默认支持 Logback:

logging:
  file:
    name: /var/log/myapp/app.log
  logback:
    rollingpolicy:
      max-file-size: 100MB
      max-history: 30

五、常见坑提醒 ⚠️

  1. 不要手动 rm 日志
    • Java 仍占用文件句柄
  2. nohup 日志一定要 logrotate
  3. Docker 环境用 logging driver,不是 logrotate

六、你适合哪种?

场景 推荐方案
Spring Boot Logback / log4j2
老项目 logrotate
Docker 容器日志
微服务 集中日志(ELK)

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

  • Java 版本
  • 用的框架(Spring Boot?)
  • 日志怎么启动的(nohup?systemd?Docker?)

我可以给你精准配置。

0 踩