温馨提示×

centos java日志如何切割

小樊
45
2026-10-06 01:24:26
栏目: 编程语言

在 CentOS 上,Java 应用的日志切割常见有 3 种主流方案,你可以根据项目情况选择。


一、使用 Log4j / Logback 自带切割(推荐)

1️⃣ Logback(最常用)

在 logback.xml 中配置 RollingFileAppender:

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

✅ 按天切割
✅ 自动删除 30 天前日志


2️⃣ Log4j2

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

二、使用 Linux 自带 logrotate(通用方案)

适合 标准输出 / 未做切割的日志文件

1️⃣ 创建配置

vim /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 30
    compress
    missingok
    notifempty
    copytruncate
}

2️⃣ 说明

  • copytruncate:不重启 Java 进程即可切割
  • compress:压缩旧日志
  • rotate 30:保留 30 天

3️⃣ 手动测试

logrotate -f /etc/logrotate.d/myapp

三、使用 nohup + cronolog(老方案)

nohup java -jar app.jar | cronolog /var/log/myapp/app.%Y-%m-%d.log &

⚠️ 已逐渐淘汰,不推荐新项目使用


四、常见坑提醒

✅ Java 程序 不能直接 mv 日志文件(会导致继续写旧文件)
✅ 推荐顺序:

  1. Logback / Log4j2(首选)
  2. logrotate + copytruncate(兜底)

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

  • 用的什么框架(Spring Boot?)
  • 日志是 stdout 还是文件?
  • CentOS 版本

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

0 踩