温馨提示×

centosjava日志如何切割

小樊
56
2026-09-21 09:26:48
栏目: 编程语言

在 CentOS 上,Java 应用日志切割常见有几种方式,下面按最常用 → 进阶给你讲清楚,你可以按需选。


一、最推荐:使用 logrotate(系统级,通用)

适合:所有 Java 日志(不管你用 log4j / logback / 系统输出)

1. 示例场景

假设 Java 日志在:

/opt/app/logs/app.log

2. 创建 logrotate 配置

vi /etc/logrotate.d/app-log

内容示例:

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

参数说明

  • daily:每天切割
  • rotate 30:保留 30 份
  • compress:压缩旧日志
  • copytruncate:不重启 Java 进程直接截断日志(很重要)

3. 手动测试

logrotate -d /etc/logrotate.d/app-log   # 模拟
logrotate -f /etc/logrotate.d/app-log   # 强制执行

✅ 优点:简单、稳定、不用改代码
❌ 缺点:不是“按大小”实时切


二、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>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
    </encoder>
</appender>

✅ 按天切
✅ 自动删旧
✅ 不依赖系统


2️⃣ Log4j2(按大小 + 时间)

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

✅ 按大小 + 时间
✅ 自动压缩


三、Spring Boot 推荐方式(最简)

如果你用 Spring Boot:

logging:
  file:
    name: /opt/app/logs/app.log
  logback:
    rollingpolicy:
      file-name-pattern: /opt/app/logs/app.%d{yyyy-MM-dd}.log
      max-history: 30

四、错误方式(千万别用)

❌ 手动 rm app.log
❌ 直接 > 清空正在写的日志
➡ Java 还会写旧 inode,日志“消失但磁盘不释放”


五、怎么选?

场景 推荐
老系统 / 无日志框架 logrotate
新项目 logback / log4j2
Spring Boot 内置配置
容器 / K8s 输出 stdout + 外部采集

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

  • Java 版本
  • 用的日志框架(log4j / logback / log4j2)
  • 日志路径和大小

我可以直接帮你写可用配置。

0 踩