首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

LogCutter:跨平台 Java 日誌切割清理工具,支援定時、編碼自適應與服務化部署

     編輯:Java 相關知識

專案背景

伺服器日誌若不清理,佔用磁碟空間且影響效能。手工清理耗時且難以滿足「每週六凌晨 3 點切割超過 2GB 日誌、保留最新 100MB」等複雜策略。LogCutter 為此而生,純 Java 實現,跨平台零依賴。

核心特性

  • 全平台支援:Linux、macOS、Windows
  • 雙運行模式:前台互動式 / 後台守護進程(Linux/macOS 用 daemon,Windows 用 System Service)
  • 雙清理策略:刪除過期檔案 / 切割大檔案保留尾部
  • 編碼自適應:GB18030、UTF-8、UTF-16LE/BE,不會切斷半個字元
  • 高度可配置:執行週期、過期天數、切割閾值、保留大小均可調

快速開始

Windows

# 前台互動
> run.bat

# 後台服務
> LogCutter.exe -install-auto  # 安裝自啟動服務
> LogCutter.exe -start         # 啟動
> LogCutter.exe -status        # 查狀態
> LogCutter.exe -stop          # 停止

依賴 JRE 1.6+,需設定 JAVA_HOME 環境變數或註冊表。

Linux / macOS

# 前台
$ ./run.sh

# 後台
$ ./run.sh -d

# 開機自啟
$ vi /etc/rc.d/rc.local
# 加入:${YOUR_LOGCUTTER_PATH}/run.sh -d

配置檔詳解:conf/config.xml

<?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 ...

啟動腳本範例:run.sh (macOS)

#!/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

依賴與下載

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved