日志分割工具-cronolog
cronolog是一个简单的过滤程序,它从标准输入设备读入日志记录,并把这些记录写入到输出文件集,输出文件的名字由一个文件名模板和当前的日期时间组成。cronolog通常与web服务器一起使用,例如apache,用来安全地对日志文件按日期、月或其它特定的区间进行分割。cronolog is a simple filter program that reads log file entries from standard input and writes each entry to the output file specified by a filename template and the current date and time. When the expanded filename changes, the current file is closed and a new one opened. cronolog is intended to be used in conjunction with a Web server, such as Apache, to split the access log into daily or monthly logs.
安装
解压缩下载的源码包
配置Makefile文件
进入cronolog源码目录:
执行下面的命令可查看可配置选项:
./configure --help
使用的配置命令如下:
CC=gcc CFLAGS="-O3" ./configure --prefix=/usr/local/cronolog
配置选项说明:
CC:C编译器的名称(用于运行configure),本文示例为gcc
CFLAGS:C编译器的标志(用于运行configure),本文示例为-O3,指定优化级别为3
--prefix:指定安装目录,本文示例为/usr/local/cronolog
编译源代码
执行下面的命令编译源代码:
make
执行下面的命令安装cronolog 到目标路径:make install
目录结构
安装完毕后,将在先前指定的目标路径中生成下列目录:
./info cronolog信息文件(.info)目录
./man cronolog帮助文件(man)目录
./sbin cronolog二进制文件目录
使用
cronolog通常以管道方式作为日志过滤程序在应用的配置文件中调用。
直接用法是:
/path/cronolog [OPTIONS] logfile-spec
其中:
OPTIONS:cronolog的选项,可通过下面示例中的-h 或 --help选项查看,此处不再介绍。
logfile-spec: 是描述输出的日志文件名的模板,每一个无前导%的字符都是文件名的组成部分,%后面跟一个字符为日期和时间格式串,将被下表列出的它们代表的实际字串所替换。
特殊格式串:
%% %字符
%n 新行
%t tab字符
时间格式串:
%H 24小时制小时(00..23)
%I 12小时制小时(01..12)
%p 本地AM/PM指示符
%M 分钟(00..59)
%S 秒(00..61)
%X 本地时间(e.g.: "15:12:47")
%Z 时区 (e.g. GMT),如果不能检测出时区,值为空
日期格式串:
%a 本地简短星期名(e.g.: Sun..Sat)
%A 本地完整星期名(e.g.: Sunday .. Saturday)
%b 本地简短月名(e.g.: Jan .. Dec)
%B 本地完整月名(e.g.: January .. December)
%c 本地日期与时间(e.g.: "Sun Dec 15 14:12:47 GMT 1996")
%d 一月中的第几日(01 .. 31)
%j 一年中的第几天 (001 .. 366)
%m 月名的数字表示 (01 .. 12)
%U 一年中以星期日为每周第一天计算的星期数(00..53, 第一周包括新年的第一个星期日)
%W 一年中以星期一为每周第一天计算的星期数(00..53, 第一周包括新年的第一个星期一)
%w 星期名的数字表示 (0 .. 6, 0为星期日)
%x 本地日期 (e.g. 今天在北京是: "15/12/96")
%y 不带世纪的年(00 .. 99)
%Y 带世纪的年(1970 .. 2038)
示例
1、配置apache的访问日志
修改apache的httpd.conf文件,设置日志格式定义
修改LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
为LogFormat "%h %l %u %t \"%>s %b \"%{Referer}i\" \%{User-Agent}i\""
设置TransferLog命令
将CustomLog /var/logs/apache/access_log common
或是
CustomLog /var/logs/apache/access_log combine
修改为TransferLog "|/usr/local/sbin/cronolog /home/backup/logs/%Y%m%daccess_log"
'/home/backup/logs/'为日志分割时候日志保存位置,%Y%m%daccess_log 为日志文件的名称格式,每天一个文件。
2、将应用软件的输出重定向为特定日志文件
对于一个简单的应用程序,一个shell脚本 sitebak.sh,该脚本需24小时不间断的在后台运行。具体执行命令如下,# nohup ./sitebak.sh >> /var/log/ sitebak.log &
将标准输出重定向到文件/var/log/sitebak.log中。日志文件只有一个,随着运行时间的推移,该文件会越来越大。
现使用cronolog工具处理一下日志,修改后的命令如下
# nohup ./sitebak.sh | /usr/local/sbin/cronolog "/var/log/sitebak.log_%Y%m%d.log" &
日志文件将按天分割,每天产生一个新的日志文件。