用Java实现的日志切割清理工具

开发 后端
对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能。如果用手工方式进行清理,会花费太多时间,并且很多时候难以满足实际要求。

对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能。如果用手工方式进行清理,会花费太多时间,并且很多时候难以满足实际要求。例如:如何在每个星期六凌晨3点把超过2G大的日志文件进行切割,保留最新的100M日志记录?

网上没有发觉能满足本座要求的日志切割工具,因此花了一些闲暇时间自己写了一个。由于要在多个平台上使用,为了方便采用 Java 实现。本工具命名为 LogCutter,主要有以下特点:

  1. 支持 Linux、Mac 和 Windows 等所有常见操作系统平台
  2. 支持命令行交互式运行
  3. 支持后台非交互式运行(Linux/MAC 下使用 daemon 进程实现,Windows 用系统 Service 实现)
  4. 支持两种日志清理方式(删除日志文件或切割日志文件)
  5. 支持对 GB18030、UTF-8、UTF-16LE、UTF-16BE 等常用日志文件类型进行切割(不会发生切掉半个字符的情况)
  6. 高度可配置(程序执行周期、要删除的日志文件过期时间、要切割的日志文件阀值和保留大小等均可配置

使用方法:

  1. *******************************************************  
  2. **** LogCutter - Bruce Liang, all rights reserved. ****  
  3. *******************************************************  
  4.  
  5. 一、启动方式  
  6. --------------------------------------------------  
  7. ) Windows  
  8.     A) 前台运行: > ./run.bat  
  9.     B) 后台运行: > ./LogCutter.exe {      
  10.                                        -install-demand  (安装手动启动服务)  
  11.                                        -install-auto    (安装自动启动服务)  
  12.                                        -start           (启动服务)  
  13.                                        -stop            (停止服务)  
  14.                                        -status          (查看服务状态)  
  15.                                    }  
  16.  
  17.     *** 注 ***   
  18.         @ LogCutter.exe 以 Windows 系统服务的方式运行,安装好后也可以通过 Windows 服务管理器进行管理  
  19.         @ LogCutter.exe 依赖 JRE 1.6, 因此必须在注册表或环境变量中设置 %JAVA_HOME%  
  20. ) Linux / Unix  
  21.     A) 前台运行: $ ./run.sh  
  22.     B) 后台运行: $ ./run.sh -d  
  23.  
  24.     *** 注 ***  
  25.         @ 可以设置为开机时自动后台运行,方法如下:  
  26.  
  27.         $ vi /etc/rc.d/rc.local  
  28.                     ( 加入: ${YOUR_LOGCUTTER_PATH}/run.sh -d )  
  29. --------------------------------------------------  
  30.  
  31. 二、配置文件  
  32. --------------------------------------------------  
  33. ) 程序配置文件: ./conf/config.xml  
  34. ) 日志配置文件: ./conf/log4j.properties (默认)  
  35. --------------------------------------------------  
  36.  
  37. 三、环境要求  
  38. --------------------------------------------------  
  39. ) Java 版 本: JRE 1.6 以上  
  40. ) 依赖程序包: dom4j、log4j、juniversalchardet  
  41. -------------------------------------------------- 

run.sh (Mac 平台)

  1. #!/bin/bash  
  2.  
  3. JAVA_HOME="/Library/Java/Home" 
  4. CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
  5. JAVA_BIN=$JAVA_HOME/bin  
  6. JAVA=$JAVA_BIN/java  
  7.  
  8. APP_PATH="/Users/Kingfisher/MyWork/Java/LogCutter" 
  9. APP_CLASSPATH=$APP_PATH/classes  
  10. APP_LIBPATH=$APP_PATH/lib  
  11. APP_LIBS=$APP_LIBPATH/dom4j-1.6.1.jar:$APP_LIBPATH/log4j-1.2.16.jar:$APP_LIBPATH/juniversalchardet-1.0.3.jar  
  12. APP_CONFPATH=$APP_PATH/conf  
  13. APP_CONFFILE=$APP_CONFPATH/config.xml  
  14. APP_MAIN_CLASS=com.bruce.main.LogCutter  
  15.  
  16. DAEMON='-d' 
  17. CMD="$JAVA -cp $CLASSPATH:$APP_CLASSPATH:$APP_LIBS $APP_MAIN_CLASS -f $APP_CONFFILE" 
  18.  
  19. if [ $# -eq 0 ]  
  20. then  
  21.     $CMD  
  22. elif [ "$#" -eq 1 -a "$1" = "$DAEMON" ]  
  23. then  
  24.     $CMD &  
  25. else  
  26.     echo "Usage: $0 [ $DAEMON ]"  
  27.     exit 1  
  28. fi 

交互式运行操作演示:

  1. [Kingfisher@Bruce-mbp LogCutter] $ pwd  
  2. /Users/Kingfisher/MyWork/Java/LogCutter  
  3. [Kingfisher@Bruce-mbp LogCutter] $ ./run.sh   
  4. command line usage   
  5. ------------------------------------------------------------  
  6.     HELP : Show help  
  7.     JOBS : Show jobs status  
  8.      CFG : Show configuration summary  
  9.      RUN : Schedule jobs manually  
  10.       !Q : Shutdown application  
  11.        ? : About me  
  12. ------------------------------------------------------------  
  13. > help  
  14. command line usage   
  15. ------------------------------------------------------------  
  16.     HELP : Show help  
  17.     JOBS : Show jobs status  
  18.      CFG : Show configuration summary  
  19.      RUN : Schedule jobs manually  
  20.       !Q : Shutdown application  
  21.        ? : About me  
  22. ------------------------------------------------------------  
  23. > jobs  
  24. jobs summary (total: 2, active: 0)   
  25. ------------------------------------------------------------  
  26. . DelFileRunner@334936591                    [  Idle  ]  
  27. . CutFileRunner@724646150                    [  Idle  ]  
  28. ------------------------------------------------------------  
  29. > cfg  
  30. configuration summary   
  31. ------------------------------------------------------------  
  32. [global]  
  33.     start-check-delay : 1 hours  
  34.        check-interval : 24 hours  
  35.     log4j-config-file : /Users/Kingfisher/MyWork/Java/LogCutter/classes/../conf/log4j.properties  
  36.             lock-file : /Users/Kingfisher/MyWork/Java/LogCutter/classes/../LogCutter.lock  
  37. [delete-files] (expire: 30 days)  
  38. . /opt/LogCutter/logs/LogCutter.log*  
  39. . /opt/tomcat6-logs/*.log  
  40. . /opt/tomcat7-logs/*.log  
  41. [cut-files] (threshold: 30960 KBs, reserve: 1024 KBs)  
  42. . /opt/apache-logs/*_log  
  43. . /opt/nginx-logs/*.log  
  44. . /opt/tomcat6-logs/catalina.out  
  45. . /opt/tomcat7-logs/catalina.out  
  46. . /var/lib/mysql/*.err  
  47. ------------------------------------------------------------  
  48. > run  
  49. manual jobs are scheduled !  
  50. > ?  
  51. LogCutter 1.0.2 - Bruce Liang, all rights reserved.   
  52. ------------------------------------------------------------  
  53.     Description : schedule to DELETE and CUT text log files automatically or manually.  
  54.         Support : GB18030, UTF-8, UTF-16LE and UTF-16BE text file types.  
  55.           Usage : java com.bruce.main.LogCutter [ -f <config-file> ]  
  56.                   (default config file is '/Users/Kingfisher/MyWork/Java/LogCutter/classes/../conf/config.xml')  
  57. ------------------------------------------------------------  
  58. > !q  
  59. be about to shutdown, please wait ...  
  60. shutdown perfectly ! 

后台运行演示(Mac 平台):

  1. [Kingfisher@Bruce-mbp LogCutter] $ ./run.sh -d  
  2. [Kingfisher@Bruce-mbp LogCutter] $   
  3. LogCutter is running in background, use 'kill 4544' to stop me.  
  4.  
  5. [Kingfisher@Bruce-mbp LogCutter] $ kill 4544  
  6. [Kingfisher@Bruce-mbp LogCutter] $   
  7. !! LogCutter received terminate signal !!  
  8. be about to shutdown, please wait ...  
  9. shutdown perfectly !  
  10.  
  11. [Kingfisher@Bruce-mbp LogCutter] $ 

程序运行日志

  1. :52:20,705  INFO [main]: ->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->-> 
  2. :52:20,706  INFO [main]: starting: class com.bruce.main.LogCutter ...  
  3. :52:20,707  INFO [main]: configuration summary   
  4. ------------------------------------------------------------  
  5. [global]  
  6.     start-check-delay : 1 hours  
  7.        check-interval : 24 hours  
  8.     log4j-config-file : /Users/Kingfisher/MyWork/Java/LogCutter/classes/../conf/log4j.properties  
  9.             lock-file : /Users/Kingfisher/MyWork/Java/LogCutter/classes/../LogCutter.lock  
  10. [delete-files] (expire: 30 days)  
  11. . /opt/LogCutter/logs/LogCutter.log*  
  12. . /opt/tomcat6-logs/*.log  
  13. . /opt/tomcat7-logs/*.log  
  14. [cut-files] (threshold: 30960 KBs, reserve: 1024 KBs)  
  15. . /opt/apache-logs/*_log  
  16. . /opt/nginx-logs/*.log  
  17. . /opt/tomcat6-logs/catalina.out  
  18. . /opt/tomcat7-logs/catalina.out  
  19. . /var/lib/mysql/*.err  
  20. ------------------------------------------------------------  
  21. :52:39,062  INFO [pool-1-thread-2]: - - - - - - - -> start CutFileRunner@724646150 <- - - - - - - -  
  22. :52:39,062  INFO [pool-1-thread-1]: - - - - - - - -> start DelFileRunner@334936591 <- - - - - - - -  
  23. :52:39,063  INFO [pool-1-thread-2]: - - - - - - - -> end   CutFileRunner@724646150 <- - - - - - - -  
  24. :52:39,063  INFO [pool-1-thread-1]: - - - - - - - -> end   DelFileRunner@334936591 <- - - - - - - -  
  25. :52:54,222  INFO [main]: stoping: class com.bruce.main.LogCutter ...  
  26. :52:54,222  INFO [main]: <-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<- 

程序配置文件(./conf/config.xml)

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <CONFIG> 
  3.     <global> 
  4.         <!-- 开始日志检查延时 (小时), 默认: 0 (立刻开始) --> 
  5.         <start-check-delay>1</start-check-delay> 
  6.         <!-- 日志检查间隔 (小时), 默认: 72 --> 
  7.         <check-interval>24</check-interval> 
  8.         <!-- Log4J 配置文件, 默认: ${CLASS_ROOT}/../conf/log4j.properties --> 
  9.         <log4j-config-file></log4j-config-file> 
  10.         <!-- 程序锁, 默认: ${CLASS_ROOT}/../${APP_NAME}.lock --> 
  11.         <lock-file></lock-file> 
  12.     </global> 
  13.     <!-- 要删除的日志文件列表 --> 
  14.     <!-- delete-files.expire: 日志文件过期时间(天), 默认: 90 --> 
  15.     <delete-files expire="30"> 
  16.         <!-- files: 文件名称(不包含目录), 必须填写, 可包含通配符 --> 
  17.         <!-- files.path: 文件所在目录, 必须填写, 不能包含通配符 --> 
  18.         <file path="/opt/LogCutter/logs">LogCutter.log*</file> 
  19.         <file path="/opt/tomcat6-logs">*.log</file> 
  20.         <file path="/opt/tomcat7-logs">*.log</file> 
  21.         <!--  
  22.         <file path="/var/lib/mysql">mysql-bin.*</file> 
  23.         <file path="/var/lib/mysql">efly-test-relay-bin.*</file> 
  24.         --> 
  25.     </delete-files> 
  26.     <!-- 要截断的日志文件列表 --> 
  27.     <!-- cut-files.threshold: 日志文件截断阀值(KB), 默认: 10240 --> 
  28.     <!-- cut-files.reserve: 日志文件保留内容(KB), 默认: 1024 --> 
  29.     <!--  
  30.          <!注!> 'cut-files.reserve' 是保留内容的近似值得, 实际内容按行取整保留  
  31.             如下列日志文件内容:  
  32.                 ...... ...... ......  
  33.                  line1: xxxxxxxxxxxxxxxxxxxxx  
  34.                  line2: xxxxxxxxxxPyyyyyyyyyy  
  35.                  line3: zzzzzzzzzzzzzzzzzzzzz  
  36.                  line4: zzzzzzzzzzzzzzzzzzzzz  
  37.                  ...... ...... ...... (EOF)  
  38.              'P'为定位得到的保留起点, 程序实际会在'P'点开始查找下一个换行符,  
  39.              从该换行符的后一个字符开始保留, 也就是从第三行开始保留到文件末尾  
  40.     --> 
  41.     <cut-files threshold="30960" reserve="1024"> 
  42.                 <file path="/opt/apache-logs">*_log</file> 
  43.                 <file path="/opt/nginx-logs">*.log</file> 
  44.                 <file path="/opt/tomcat6-logs">catalina.out</file> 
  45.                 <file path="/opt/tomcat7-logs">catalina.out</file> 
  46.                 <file path="/var/lib/mysql">*.err</file> 
  47.     </cut-files> 
  48. </CONFIG> 

下载试用:http://files.cnblogs.com/ldcsaa/LogCutter.zip

原文链接:http://www.cnblogs.com/ldcsaa/archive/2012/02/12/2347689.html

【编辑推荐】

  1. Java网络组件 HttpComponents 4.2-beta1发布
  2. 甲骨文发布JSR 356 针对WebSocket的Java API
  3. Disruptor 2.8发布 Java 并发编程框架
  4. jOOQ 2.0.4发布 Java的ORM框架
  5. Wordpress Java 0.5 发布

 

责任编辑:林师授 来源: ~怪^_*兽~的博客
相关推荐

2012-06-25 12:33:12

Java日志切割

2011-01-27 16:53:13

系统清理工具BleachBitLinux

2013-01-05 09:43:25

亚马逊AWS公有云服务Netflix

2011-11-21 15:04:30

2010-05-26 09:10:44

Windows清理工具

2013-03-13 09:36:56

PC清理工具Windows8

2010-03-30 19:23:56

Nginx日志切割

2018-09-14 10:20:09

微软工具Windows

2013-04-17 09:17:37

Linux文件系统系统清理工具

2010-03-30 19:41:16

Nginx日志

2021-05-14 23:22:58

Windows 10Windows微软

2015-07-22 17:33:52

UbuntuCCleaner系统清理工具

2017-01-24 18:49:28

Windows磁盘清理

2023-03-09 14:48:07

Chrome浏览器

2021-07-28 09:53:48

禁用CPU清理工具

2021-02-01 05:57:43

电脑文件清理工具

2013-04-15 15:07:43

清理日志Linux系统

2013-08-02 14:19:50

Java日志缓存

2023-02-09 18:00:00

日志工具

2017-02-13 16:46:16

日志管理工具
点赞
收藏

51CTO技术栈公众号