logrotate
是Linux系統自帶的日志管理工具,可自動完成日志的輪轉、壓縮、刪除等操作,適合批量管理Java應用的日志文件。
sudo yum install logrotate # CentOS/RHEL系統
sudo apt install logrotate # Ubuntu/Debian系統
/etc/logrotate.d/java
文件,添加以下內容(根據實際路徑調整):/path/to/your/java/logs/*.log {
daily # 按天輪轉(可選:weekly/monthly)
rotate 7 # 保留最近7天的日志
compress # 壓縮舊日志(節省空間)
missingok # 日志文件不存在時不報錯
notifempty # 日志為空時不輪轉
create 0644 root root # 輪轉后創建新日志文件并設置權限
}
logrotate -d /etc/logrotate.d/java
重新加載配置使生效:sudo systemctl reload logrotate
通過Shell腳本實現定制化的日志備份(如按日期命名)和過期清理,適合需要額外處理的場景(如上傳備份到遠程服務器)。
backup_java_logs.sh
):#!/bin/bash
BACKUP_DIR="/path/to/backup/directory" # 備份目錄
DATE=$(date +%Y%m%d) # 當前日期(用于文件名)
LOG_DIR="/path/to/your/java/logs" # Java日志目錄
# 備份日志文件(帶日期后綴)
cp "$LOG_DIR"/*.log "$BACKUP_DIR/java_$DATE.log"
# 清空原始日志文件(避免占用空間)
> "$LOG_DIR"/*.log
# 刪除30天前的備份文件
find "$BACKUP_DIR" -mtime +30 -type f -name "java_*.log" -exec rm -f {} \;
crontab -e
編輯當前用戶的定時任務,添加以下內容(每天凌晨0點執行):0 0 * * * /path/to/backup_java_logs.sh
在Java應用中配置日志框架(如Log4j、Logback)的輪轉策略,從應用層面控制日志文件的大小和數量,避免日志無限增長。
logback.xml
):<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file> <!-- 當前日志文件路徑 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app-%d{yyyy-MM-dd}.log.gz</fileNamePattern> <!-- 輪轉文件名(帶日期+壓縮) -->
<maxHistory>30</maxHistory> <!-- 保留30天的日志 -->
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="FILE" />
</root>
</configuration>
log4j2.xml
):<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d %p %c{1.} [%t] %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy /> <!-- 按天輪轉 -->
<SizeBasedTriggeringPolicy size="100 MB"/> <!-- 單個文件超過100MB時輪轉 -->
</Policies>
<DefaultRolloverStrategy max="20"/> <!-- 最多保留20個備份 -->
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
若Java應用通過systemd
啟動(如使用systemctl start java-app
),其日志由journalctl
管理,可通過以下命令清理:
sudo journalctl --vacuum-time=1w # 只保留最近1周的日志
sudo journalctl --vacuum-size=500M # 只保留500MB以內的日志
java-app
服務):sudo journalctl --unit=java-app --vacuum-time=3d # 只保留最近3天的該服務日志
對于臨時或無用的日志,可直接通過命令手動刪除(謹慎操作,避免誤刪正在使用的日志):
find /path/to/java/logs -type f -name "*.log" -mtime +30 -exec rm -f {} \;
> /path/to/java/logs/app.log # 清空文件內容
以上技巧可根據實際需求組合使用(如logrotate
批量管理+Logback應用層輪轉),確保Java日志既不會占用過多磁盤空間,又能保留必要的歷史記錄。