可以在epel源中下载,或者从其github上安装:https://github.com/fordmason/cronolog。
[root@xuexi ~]# 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, then exit -p PERIOD, --period=PERIOD set the rotation period explicitly -d DELAY, --delay=DELAY set the 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 error if FILE is "-") -a, --american American date formats -e, --european European date formats (default) -s, --start-time=TIME starting time -z TZ, --time-zone=TZ use TZ for timezone -V, --version print version number, then exit这个工具的使用非常简单,但必须得搞懂它的轮替原理。以下面设置为例:
CustomLog "|/usr/local/sbin/cronolog logs/%Y/%m/%d/access.log" combined由于使用的是相对路径,所以它相对于ServerRoot。假设ServerRoot为/usr/local/apache,则这里的日志将创建在/usr/local/apache/logs/%Y/%m/%d/access.log,其中%Y、%m、%d分别表示的是年、月、日。这些修饰符组成的文件名或目录被称为模板。
cronolog的轮替原理是:根据当前日志文件模板的时间点,和当前时间进行比较,如果模板中的某个部分和当前时间点的不同,则需要进行轮替,轮替时会自动创建缺失的目录,并且计算下一次进行轮替的时间点。在轮替时,先关闭当前日志文件,再根据当前时间点创建新日志文件,并打开新日志文件。但注意,cronolog工具在创建或轮替时,如果没有请求到达,则不会立即创建日志文件,这和rotatelogs工具的默认情况是一样的。
看上去很简单,确实很简单,它只需要根据指定的时间修饰符和当前时间点进行比较就可以了。例如上面的配置,如果当前时间点为2017-10-01,则按照以下顺序进行创建,注意,只有在请求到达时才会创建,没有请求时是不会创建的。
Period 1:在第一个请求到达时创建
logs/2017目录是否存在,不存在则创建。
logs/2017/10目录是否存在,不存在则创建。
logs/2017/10/01目录是否存在,不存在则创建。
创建logs/2017/10/01/access.log文件,并写日志。
Period 2:在2017-10-02凌晨第一个请求到达时创建
logs/2017目录已存在,不创建。
logs/2017/10目录已存在,不创建。
logs/2017/10/02目录不存在,创建。
创建logs/2017/10/02/access.log文件,并写日志。
之后将继续按照此规则不断进行下去。
也就是说,cronolog默认将按照最小单位的时间修饰符为轮替时间间隔。例如,最小单位为%d时,将按照天轮替,最小单位为%W将按周轮替,最小单位为%S,将按秒轮替。但仍然需要说明的是,只有请求到达时,才会按照当前时间点创建新的日志文件。例如,如果按秒轮替,第10秒时创建了一个文件10.log,第11秒将关闭该日志文件,但是不会立即创建新日志文件,假设在第15秒时新的请求到达,则创建一个15.log,而不是11.log。
此外,cronolog可使用"-p N UNITs"选项显式指定轮替时间间隔,有效单位UNITs为:seconds,minutes,hours,days,weeks和months。例如"-p 5 minutes"表示每5分钟轮替一次。但需要注意,N的值必须为更高一级UNITs的公因数(不包括最大公因数),例如小时的长度为60分钟,在指定minutes单位时,可以指定"1,2,3,4,5,6,10,15,20,30 minutes",但不能指定为"7,9,11,12,13,14"等minutes。
如果不想轮替,有两种方法:不要使用时间类的修饰符;使用"-o"选项。这时候会一直写同一个文件。
cronolog还支持动态符号链接功能,例如下面的配置,这样就使得每次访问/usr/local/apache/logs/access_log都能访问到最新的日志文件。
CustomLog "|/path/to/cronolog --symlink=/usr/local/apache/logs/access_log /usr/local/apache/logs/%Y/%m/access_log" combined最后,cronolog不支持日志截断。
1.5 rotatelogs和cronolog的比较这两个工具各有优缺点。
在日志文件路径上:rotatelogs无法将时间类修饰符作为目录,只能使用在日志文件名上。而cronolog可以。例如logs/%Y%m/%d/access.log。