Java在CentOS上的日志管理指南
ps -ef | grep java命令列出所有運行中的Java進程,獲取進程ID(PID)以便后續操作。application.properties中logging.file.name=logs/application.log,Tomcat的catalina.out),需根據項目配置確認。tail -f /path/to/logfile.log命令實時監控日志文件的最新內容,便于跟蹤程序運行狀態。grep "ERROR" /path/to/logfile.log命令過濾日志中的錯誤信息,快速定位問題;可使用grep -i "keyword"忽略大小寫,或grep -A 5 "error"顯示匹配行及后5行上下文。使用CentOS自帶的logrotate工具實現日志自動切割、壓縮和歸檔,防止單個日志文件占用過多磁盤空間。
/etc/logrotate.d/目錄下新建Java日志配置文件(如java_logs),內容示例如下:/path/to/java/logs/*.log {
daily # 每天輪轉一次
rotate 7 # 保留最近7個備份
compress # 壓縮舊日志(如.gz格式)
missingok # 忽略缺失的日志文件
notifempty # 非空文件才輪轉
create 0644 root root # 創建新日志文件并設置權限
postrotate # 輪轉后執行的命令(可選)
/usr/bin/kill -HUP `cat /var/run/logrotate.pid` 2>/dev/null || true
endscript
}
logrotate -vf /etc/logrotate.d/java_logs命令,驗證配置是否正確。Java應用常用Logback(推薦,與SLF4J集成)或Log4j2作為日志框架,通過配置文件定義日志級別、輸出格式和存儲路徑。
<configuration>
<!-- 控制臺輸出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>["是", "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n", "%msg%n"]
</encoder>
</appender>
<!-- 文件輸出(帶滾動策略) -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/java_app/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/java_app/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留30天日志 -->
</rollingPolicy>
<encoder>
<pattern>["是", "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n"]
</encoder>
</appender>
<!-- 設置根日志級別(DEBUG/INFO/WARN/ERROR) -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
</Console>
<RollingFile name="File" fileName="/var/log/java_app/app.log"
filePattern="/var/log/java_app/app-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/> <!-- 每天滾動 -->
<SizeBasedTriggeringPolicy size="10 MB"/> <!-- 超過10MB滾動 -->
</Policies>
<DefaultRolloverStrategy max="30"/> <!-- 保留30個備份 -->
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
DEBUG捕獲詳細信息,生產環境用INFO或WARN減少日志量),例如在logback.xml中將<root level="INFO">改為<root level="DEBUG">。對于分布式系統或多節點Java應用,使用**ELK Stack(Elasticsearch+Logstash+Kibana)**實現日志集中收集、存儲和分析:
systemctl start elasticsearch),用于存儲和索引日志數據;java_log.conf),定義輸入(如從文件讀?。?、過濾(如解析JSON格式)和輸出(發送到Elasticsearch);systemctl start kibana),通過Web界面可視化日志數據(如創建儀表盤展示錯誤日志趨勢)。logstash-log4j2-encoder),將日志直接發送到Logstash;或通過rsyslog將日志轉發到Logstash。#!/bin/bash
LOG_DIR="/var/log/java_app"
BACKUP_DIR="/path/to/backup"
DATE=$(date -d "yesterday" +%Y%m%d)
# 備份日志
cp $LOG_DIR/*.log $BACKUP_DIR/java_app_$DATE.log
# 清空原始日志
> $LOG_DIR/*.log
# 刪除30天前的備份
find $BACKUP_DIR -name "java_app_*.log" -mtime +30 -exec rm -f {} \;
crontab -e命令添加定時任務,例如每天凌晨1點執行備份腳本:0 1 * * * /path/to/backup_script.sh
compress和maxage參數(如compress壓縮舊日志,maxage 30刪除30天前的備份),可與定時腳本互補使用。