Log-Cutter 是JessMA开源组织开发的一个简单实用的日志切割清理工具。对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能。如果用手工方式进行清理,会花费太多时间,并且很多时候难以满足实际要求。例如:如何在每个星期六凌晨3点把超过 2G 大的日志文件进行切割,保留最新的 100M 日志记录? 网上没有发现能满足本座要求的日志切割工具,因此花了一些闲暇时间自己写了一个。由于要在多个平台上使用,为了方便采用 Java 实现。本工具命名为 Log-Cutter,主要有以下特点:
- 支持 Linux、Mac 和 Windows 等所有常见操作系统平台
- 支持命令行交互式运行
- 支持后台非交互式运行(Linux/MAC 下使用 daemon 进程实现,Windows 用系统 Service 实现)
- 支持三种日志清理方式(删除日志文件、切割日志文件或归档日志文件)
- 支持对 GB18030、UTF-8、UTF-16LE、UTF-16BE 等常用日志文件类型进行切割
- 高度可配置(程序执行周期、要删除的日志文件过期时间、要切割的日志文件阀值和保留大小等均可配置
Log-Cutter 官方网站:http://www.jessma.org
Log-Cutter 下载地址:http://code.google.com/p/ldcsaa/
- 使用方法:
******************************************************** ******************
**** LogCutter - JessMA Open Source , all rights reserved . ****
************************************************************** ************
一、启动方式
--------------------------------------------------
1 ) Windows
A) 前台运行 : > ./ run . bat [ - f config - file ]
*** 注 ***
@ 启动前先配置好 run . bat 中的 ‘JAVA_HOME’ 和 ‘APP_PATH’ 环境变量
B) 后台运行 : > LogCutter . exe {
- install - demand (安装手动启动服务)
- install - auto (安装自动启动服务)
- uninstall (删除服务)
- start (启动服务)
- stop (停止服务)
- status (查看服务状态)
}
*** 注 ***
@ LogCutter . exe 以 Windows 系统服务的方式运行,安装好后也可以通过 Windows 服务管理器进行管理
@ LogCutter . exe 是 32 位程序,LogCutter_x64 . exe 是 64 位程序,根据需要使用其中之一
@ LogCutter . exe 依赖 JRE 1.6 +, 因此必须在注册表或环境变量中设置 %JAVA_HOME %
2 ) Linux / Unix
A) 前台运行 : $ ./ run . sh [ - f config - file ]
B) 后台运行 : $ ./ run . sh [ - f config - file ] - d
*** 注 ***
@ 启动前先配置好 run . sh 中的 ‘JAVA_HOME’ 和 ‘APP_PATH’ 环境变量
@ 可以把后台运行命令加入 / etc / rc . d / rc . local 文件中,从而设置为开机时自动运行
--------------------------------------------------
二、配置文件
--------------------------------------------------
1 ) 程序配置文件 : ./ conf / config . xml (默认)
(示例参考: ./ conf / config - template . xml)
2 ) 日志配置文件 : ./ conf / log4j . properties (默认)
(示例请参考: ./ conf / log4j . properties)
--------------------------------------------------
三、环境要求
--------------------------------------------------
1 ) Java 版 本 : JRE 1.6 以上
2 ) 依赖程序包 : dom4j、log4j、ant、juniversalchardet
--------------------------------------------------
详细说明与使用方法参考:《操作指南》
- 配置文件
<? xml version="1.0" encoding="UTF-8" ?>
< CONFIG xmlns ="http://www.jessma.org"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://www.jessma.org http://www.jessma.org/schema/log-cutter-cfg-2.0.xsd" >
< global >
<!-- 开始日志检查延时 (小时), 默认: 0 (立刻开始)
1) 当指定为一个整数值时,执行器首次启动延时时间为该值设定的小时数
(例如:12 小时后首次启动执行器)
<start-check-delay>12</start-check-delay>
2) 当指定为一个 ‘hh:mm’ 格式的值时,执行器首次启动时间为该时分值
(例如:12 点 34 分首次启动执行器,如果当前时间超过 12 点 34 分则在明天的 12 点 34 分首次启动执行器)
<start-check-delay>12:34</start-check-delay>
-->
<!-- 02 点 30 分首次启动执行器 -->
< start-check-delay > 02:30 </ start-check-delay >
<!-- 日志检查间隔 (小时), 默认: 72 -->
< check-interval ></ check-interval >
<!-- Log4J 配置文件, 默认: ${CLASS_ROOT}/../conf/log4j.properties -->
< log4j-config-file ></ log4j-config-file >
<!-- 进程锁文件, 默认: ${CLASS_ROOT}/../${APP_NAME}.lock -->
< lock-file ></ lock-file >
</ global >
<!-- 要删除的日志文件列表(可配置多个,由 DelFileRunner 执行)
1) DelFileRunner 会递归删除符合条件的文件夹及其中的所有文件
2) 注意:在判断是否删除文件夹时,检测的是文件夹的最后修改时间,而不是其中文件的最后修改时间
3) DelFileRunner 适用于清理 “定期产生新日志文件” 的应用程序日志
-->
<!-- delete-files.expire: 日志文件过期时间(天), 默认: 90 -->
< delete-files expire ="30" >
<!-- file.path: 文件所在目录, 必须填写, 不能包含通配符 -->
<!-- file: 文件或文件夹名称, 必须填写, 可包含通配符 -->
< file path ="D:\LogCutter\logs" > LogCutter.log* </ file >
< file path ="D:\hMailServer\Logs" > *.log </ file >
< file path ="D:\Tomcat 6.0\logs" > *.log </ file >
</ delete-files >
< delete-files expire ="365" >
< file path ="E:\backup" > * </ file >
</ delete-files >
<!-- 要截断的日志文件列表(可配置多个,由 CutFileRunner 执行)
1) CutFileRunner 只会扫描符合条件的文件,不会扫描文件夹
2) CutFileRunner 会截断文件的前部内容,保留后部内容
3) CutFileRunner 适用于清理 “日志文件不断追加增长” 的应用程序日志
-->
<!-- cut-files.threshold: 日志文件截断阀值(KB), 默认: 10240 -->
<!-- cut-files.reserve: 日志文件保留内容(KB), 默认: 1024 -->
<!--
<!注!> 'cut-files.reserve' 是保留内容的近似值, 实际内容按行取整保留
如下列日志文件内容:
line1: xxxxxxxxxxxxxxxxxxxxx
line2: xxxxxxxxxxPyyyyyyyyyy
line3: zzzzzzzzzzzzzzzzzzzzz
line4: zzzzzzzzzzzzzzzzzzzzz
(EOF)
'P'为定位得到的保留起点, 程序实际会在'P'点开始查找下一个换行符,
从该换行符的后一个字符开始保留, 也就是从第三行开始保留到文件末尾
-->
< cut-files threshold ="10240" reserve ="512" >
< file path ="D:\Apache-2.2\logs" > *.log </ file >
< file path ="D:\MySQL Server 5.1\data" > *.err </ file >
</ cut-files >
<!-- 要归档的日志文件列表(可配置多个,由 ArcFileRunner 执行)
1) ArchiveFileRunner 把符合条件的文件或文件夹压缩归档到指定目录,并删除原文件或文件夹
2) 归档文件格式:{原文件/文件夹名称}_{系统时间}.zip
3) 注意:在判断是否归档文件夹时,检测的是文件夹的最后修改时间,而不是其中文件的最后修改时间
4) ArchiveFileRunner 适用于清理 “定期产生新日志文件或日志目录” 的应用程序日志
-->
<!-- archive-files.expire: 日志文件过期时间(天), 默认: 90 -->
<!-- archive-files.archive-path: 日志文件归档目录 -->
< archive-files expire ="120" archive-path ="E:\backup" >
< file path ="D:\MySQL Server 5.1\data" > mysql-bin.* </ file >
</ archive-files >
</ CONFIG >
Log-Cutter 2.0.1 更新:
1、增加文件归档执行器 ArcFileRunner
1) ArcFileRunner 把符合条件的文件或文件夹压缩归档到指定目录,并删除原文件或文件夹
2) 属性 expire 指定归档到期时间,属性 archive-path 指定归档目录
3) 归档文件格式:{原文件/文件夹名称}_{系统时间}.zip
(例如:下面的配置把最后修改时间超过 90 天的文件或文件夹归档到 ‘E:\backup’ 目录)
<archive-filesarchive-path="E:\backup" expire=90>
<file path="X:\MyApp\logs">*</file>
<file path="X:\nginx-1.4.1\logs">*.log</file>
</archive-files>
2、支持多组文件清理策略
1) config.xml 可以配置多项 <delete-files>、<cut-files> 或 <archive-files>
2) 不同的配置项可以使用不同的清理策略参数
(例如:下面配置的两组归档清理策略中,分别指定不同的归档到期时间和归档目录)
<archive-files archive-path="E:\backup" expire=90>
<file path="X:\MyApp\logs">*</file>
<file path="X:\nginx-1.4.1\logs">*.log</file>
</archive-files>
<archive-files archive-path="E:\backup2" expire=300>
<file path="X:\MyApp2\logs">*</file>
<file path="X:\Tomcat-6\logs">*.log</file>
</archive-files>
3、文件删除执行器 DelFileRunner 支持递归删除文件夹
1) DelFileRunner 会递归删除符合条件的文件夹及其中的所有文件
2) 注意:在判断是否删除文件夹时,检测的是文件夹的最后修改时间,而不是其中文件的最后修改时间
(例如:下面的配置会删除 logs 目录下所有最后修改时间超过 90 天的文件或文件夹)
<delete-files expire=90>
<file path="X:\MyApp\logs">*</file>
</delete-files>
4、执行器首次启动延时配置 ‘<start-check-delay>’ 支持指定绝对时间
1) 当指定为一个整数值时,执行器首次启动延时时间为该值设定的小时数
2) 当指定为一个 ‘hh:mm’ 格式的值时,执行器首次启动时间为该时分值
(例如)
<!-- 12 小时后首次启动执行器 -->
<start-check-delay>12</start-check-delay>
<!-- 12 点 34 分首次启动执行器,如果当前时间超过 12 点 34 分则在明天的 12 点 34 分首次启动执行器 -->
<start-check-delay>12:34</start-check-delay>
引用来自“伤神小怪兽”的评论
引用来自“哈库纳”的评论
引用来自“伤神小怪兽”的评论
引用来自“哈库纳”的评论
好像日志管理不需要这么复杂把。。。。
倒是可以用在一些不注重日志的应用上,如果是这样的话就像楼上所说的 写一个 批处理 批量删除一下就可以了 犯不上弄这么大个东西装在服务器上,而且还要在服务器上开一个常驻进程。。。要知道一个 JVM 启动起来一般要占用100MB内存。CPU资源还没有去算它呢。
如果你这个是一个日志收集系统,将收集的日志统一传送到日志服务器。而不是清理就变得非常有意义了。
2、正式版将加入单次运行模式,由crontab之类的调度器去调度
3、写个配置文件总比写脚本容易,可维护
4、日志收集功能这个值得考虑
引用来自“哈库纳”的评论
引用来自“伤神小怪兽”的评论
引用来自“哈库纳”的评论
好像日志管理不需要这么复杂把。。。。
倒是可以用在一些不注重日志的应用上,如果是这样的话就像楼上所说的 写一个 批处理 批量删除一下就可以了 犯不上弄这么大个东西装在服务器上,而且还要在服务器上开一个常驻进程。。。要知道一个 JVM 启动起来一般要占用100MB内存。CPU资源还没有去算它呢。
如果你这个是一个日志收集系统,将收集的日志统一传送到日志服务器。而不是清理就变得非常有意义了。
2、正式版将加入单次运行模式,由crontab之类的调度器去调度
3、写个配置文件总比写脚本容易,可维护
4、日志收集功能这个值得考虑
引用来自“伤神小怪兽”的评论
引用来自“哈库纳”的评论
好像日志管理不需要这么复杂把。。。。
倒是可以用在一些不注重日志的应用上,如果是这样的话就像楼上所说的 写一个 批处理 批量删除一下就可以了 犯不上弄这么大个东西装在服务器上,而且还要在服务器上开一个常驻进程。。。要知道一个 JVM 启动起来一般要占用100MB内存。CPU资源还没有去算它呢。
如果你这个是一个日志收集系统,将收集的日志统一传送到日志服务器。而不是清理就变得非常有意义了。
引用来自“哈库纳”的评论
好像日志管理不需要这么复杂把。。。。
引用来自“伤神小怪兽”的评论
引用来自“陈景峰”的评论
程序员抢管理员的饭碗,一个脚本分分钟搞定的,还要写成软件,还有一堆XML配置文件,还要安装 JVM环境,还要配置个classpath.......
至于吗?
引用来自“陈景峰”的评论
程序员抢管理员的饭碗,一个脚本分分钟搞定的,还要写成软件,还有一堆XML配置文件,还要安装 JVM环境,还要配置个classpath.......
至于吗?
至于吗?