本文文介绍一款日志分割软件cronolog。日志对于每位从事IT技术领域工作的人员来说都是相当重要的,对于系统管理员来说,系统日志、系统服务的日志以及应用软件的日志是他们每天都需要关注的,从日志中可以发现系统存在的问题以及一些危险的征兆等等;对于开发人员来说,应用软件日志、debug日志对于了解系统当时的环境、重演或模拟故障以及分析软件bug都是十分有用的。
然而一些软件本身的日志维护功能却很薄弱。其中最主要的表现就是将所有的信息都写到了同一文件中,而且又没有对其归档。这样给查看和分析日志文件带来很大不便。还有一些软件本身就没有日志功能,仅仅将信息输出到标准输出设备。为了解决这些软件先天上日志功能的不足,我们需要对日志做进一步的处理,具体来说就是分割,将其按我们需要的规格进行分割,以便日后的查看、分析、备份以及归档等。cronolog就是一款在这方面值得推崇的开源软件,本文将介绍该软件的安装以及使用,并列举几个实例。
Welcome to cronolog.org, the home of the cronolog web log rotation program.cronolog isa simple filter program that reads log file entries from standard input andwrites each entry to the output file specified by a filename template and thecurrent date and time. When the expanded filename changes, the current file isclosed and a new one opened. cronolog is intended to be used in conjunctionwith a Web server, such as Apache,to split the access log into daily or monthly logs.
cronolog 是一个简单的过滤程序,读取日志文件条目从标准输入和输出的每个条目并写入指定的日志文件的文件名模板和当前的日期和时间。当扩展文件名的变化,目前的文件是关闭,新开辟的。cronolog 旨在和一个Web服务器一起使用,如Apache,分割访问日志为每天或每月的日志。
cronolog主要和Web服务器配置使用,特别是Apache服务器,Apache 默认日志文件是不分割的,一个整文件既不易于管理,也不易于分析统计。安装cronolog后,可以将日志文件按时间分割,易于管理和分析。下面配置的一些指令:
TransferLog "|/usr/sbin/cronolog web/logs/%Y/%m/%d/access.log" ErrorLog "|/usr/sbin/cronolog /web/logs/%Y/%m/%d/errors.log" |
具体如下:
/web/logs/2018/8/12/access.log/web/logs/2018/8/12/errors.log /web/logs/2018/8/12/access.log/web/logs/2018/8/12/errors.log |
#wget http://cronolog.org/download/cronolog-1.6.2.tar.gz #tar zxvf cronolog-1.6.2.tar.gz #cd cronolog-1.6.2 #mkdir -p usr/local/cronolog #./configure --prefix=/usr/local/cronolog #Make && make install #which cronolog # /usr/local/sbin/cronolog |
基本使用
# cronolog -h usage: cronolog [OPTIONS] logfile-spec -H NAME, --hardlink=NAME maintain a hard link from NAME to current log -S NAME, --symlink=NAME maintain a symbolic link from NAME to current log -P NAME, --prev-symlink=NAME maintain a symbolic link from NAME to previous log -l NAME, --link=NAME same as -S/--symlink -h, --help print this help,thenexit -p PERIOD, --period=PERIODsetthe rotation period explicitly -d DELAY, --delay=DELAY setthe rotation period delay -o, --once-only create single output log from template (not rotated) -x FILE, --debug=FILE write debug messages to FILE ( or to standard errorifFILE is "-") -a, --american Americandateformats -e, --european Europeandateformats (default) -s, --start-time=TIME startingtime -z TZ, --time-zone=TZ use TZfortimezone -V, --version print version number,thenexit
|
当然也可以通过man cronolog查看帮助手册,说明很详细,而且有举例说明。不过需要将/usr/local/cronolog/man添加到MANPATH中。
# export MANPATH=$MANPATH:/usr/local/cronolog/man |
cronolog 通常是采取管道的方式来工作的,采用如下的形式:
# loggenerator | cronolog log_file_pattern |
loggenerator为产生log的程序,而log_file_pattern是日志文件的路径,可以在其中加入cronolog所支持的时间相关的pattern字符,如/www/log/%y/%m/%d/access.log。其pattern为%字符后跟一特殊字符,简述如下:
转移符:
% %字符 n 换行 t 水平制表符 |
时间域:
H 小时(00..23) I 小时(01..12) p 该locale下的AM或PM标识 M 分钟(00..59) S 秒 (00..61, which allows for leap seconds) X 该locale下时间表示符(e.g.:"15:12:47") Z 时区。若时区不能确定,则无意义 |
日期域:
a 该locale下的工作日简名(e.g.: Sun..Sat) A 该locale下的工作日全名(e.g.: Sunday .. Satur-ay) b 该locale下的月份简称(e.g.: Jan .. Dec) B 该locale下的月份全称(e.g.: January .. December) c 该locale下的日期和时间(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 该locale下的日期表示(e.g."13/04/97") y 两位数的年份(00 .. 99) Y 四位数的年份(1970 .. 2038) |
我们通过两个实例来具体了解一下其使用方法。
A、定义到启动文件参数
如配置的apache访问日志
修改apache的httpd.conf文件。
修改访问日志参数,设置日志格式定义
#vi httpd.conf #CustomLog"|/usr/local/sbin/cronolog/data/logs/apache.access.log.%Y%m%d" combined |
/usr/local/sbin/cronolog 为cronolog 安装后的路径。
/data/logs/ 为日志分割时候日志保存位置。
access_log.%Y%m%d 为日志文件的名称格式,每天一个文件。
B、定义创建启动脚本
将某一简单应用软件的输出重定向为特定日志文件,对于一个简单的应用程序,一个shell脚本deploy.sh,该脚本需24小时不间断的在后台运行。具体执行命令如下,
# nohup ./deploy.sh >> ./log/deploy.log &
将标准输出重定向到文件。/log/deploy.log中。
日志文件只有一个,随着运行时间的推移,该文件会越来越大。
现使用cronolog工具处理一下日志,修改后的命令如下,
# nohup ./deploy.sh | /usr/local/sbin/cronolog"./log/deploy.logdeploy_%Y%m%d.log" & |
日志文件将按天分割,每天产生一个新的日志文件。




