伺服器日誌若不清理,佔用磁碟空間且影響效能。手工清理耗時且難以滿足「每週六凌晨 3 點切割超過 2GB 日誌、保留最新 100MB」等複雜策略。LogCutter 為此而生,純 Java 實現,跨平台零依賴。
# 前台互動
> run.bat
# 後台服務
> LogCutter.exe -install-auto # 安裝自啟動服務
> LogCutter.exe -start # 啟動
> LogCutter.exe -status # 查狀態
> LogCutter.exe -stop # 停止
依賴 JRE 1.6+,需設定 JAVA_HOME 環境變數或註冊表。
# 前台
$ ./run.sh
# 後台
$ ./run.sh -d
# 開機自啟
$ vi /etc/rc.d/rc.local
# 加入:${YOUR_LOGCUTTER_PATH}/run.sh -d
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<global>
<start-check-delay>1</start-check-delay> <!-- 啟動延遲(小時) -->
<check-interval>24</check-interval> <!-- 檢查間隔(小時) -->
<log4j-config-file></log4j-config-file> <!-- Log4j 配置 -->
<lock-file></lock-file> <!-- 單實例鎖檔 -->
</global>
<delete-files expire="30"> <!-- 刪除超過 30 天的檔案 -->
<file path="/opt/LogCutter/logs">LogCutter.log*</file>
<file path="/opt/tomcat6-logs">*.log</file>
<file path="/opt/tomcat7-logs">*.log</file>
</delete-files>
<cut-files threshold="30960" reserve="1024"> <!-- 切割超過 30MB,保留 1MB -->
<file path="/opt/apache-logs">*_log</file>
<file path="/opt/nginx-logs">*.log</file>
<file path="/opt/tomcat6-logs">catalina.out</file>
<file path="/opt/tomcat7-logs">catalina.out</file>
<file path="/var/lib/MySQL">*.err</file>
</cut-files>
</CONFIG>
$ ./run.sh
command line usage
------------------------------------------------------------
HELP : Show help
JOBS : Show jobs status
CFG : Show configuration summary
RUN : Schedule jobs manually
!Q : Shutdown application
? : About me
------------------------------------------------------------
> jobs
jobs summary (total: 2, active: 0)
------------------------------------------------------------
. DelFileRunner@334936591 [ Idle ]
. CutFileRunner@724646150 [ Idle ]
------------------------------------------------------------
> cfg
configuration summary
------------------------------------------------------------
[global] start-check-delay: 1 hours, check-interval: 24 hours...
[delete-files] (expire: 30 days) ...
[cut-files] (threshold: 30960 KBs, reserve: 1024 KBs) ...
------------------------------------------------------------
> run
manual jobs are scheduled !
> !q
be about to shutdown, please wait ...
shutdown perfectly !
:52:20,705 INFO [main]: starting: class com.bruce.main.LogCutter ...
:52:39,062 INFO [pool-1-thread-2]: start CutFileRunner@724646150
:52:39,063 INFO [pool-1-thread-2]: end CutFileRunner@724646150
:52:54,222 INFO [main]: stoping: class com.bruce.main.LogCutter ...
#!/bin/bash
JAVA_HOME="/Library/Java/Home"
APP_PATH="/Users/Kingfisher/MyWork/Java/LogCutter"
APP_CLASSPATH=$APP_PATH/classes
APP_LIBS=$APP_PATH/lib/dom4j-1.6.1.jar:$APP_PATH/lib/log4j-1.2.16.jar:$APP_PATH/lib/juniversalchardet-1.0.3.jar
APP_CONFFILE=$APP_PATH/conf/config.xml
APP_MAIN_CLASS=com.bruce.main.LogCutter
DAEMON='-d'
CMD="$JAVA_HOME/bin/java -cp $CLASSPATH:$APP_CLASSPATH:$APP_LIBS $APP_MAIN_CLASS -f $APP_CONFFILE"
if [ $# -eq 0 ]; then $CMD
elif [ "$1" = "$DAEMON" ]; then $CMD &
else echo "Usage: $0 [ $DAEMON ]"; exit 1; fi