可以将Apacheconfiguration为使用不同的扩展名写入access.log或error.log?

我正在研究的事情之一是使用logrotate的dateext选项。 但是,如果我正确地理解事情apache将继续写入文件access.log和error.log。

我想知道是否有一种方法来使apache日志文件access.log.YYYYMMDD和error.log.YYYYMMDD,而不是? YYYYMMDD是创build文件时的时间戳。

Apache带有rotatelogs ,它正是你正在寻找的。

CustomLog "|/usr/bin/rotatelogs -l /var/logs/apache2/access.log.%Y%m%d 86400" combined ErrorLog "|/usr/bin/rotatelogs -l /var/logs/apache2/error.log.%Y%m%d 86400" 

或者你可以写你自己的小脚本来做到这一点。 Apache比pipe道它使用以下语法再次login到该脚本的STDIN

 CustomLog |/path/to/logger.pl combined 

您的脚本读取STDIN上的日志行并将它们写入日志文件,您可以自由select和更改该日志文件名称。

脚本可能看起来像这样

 #!/usr/bin/perl use warnings; use strict; use Time::Local; use IO::Handle; my $logfilePrefix = '/var/log/apache2/access.log.'; my $rotateAt; openLog(); while(my $l = <STDIN>) { reopenLog() if(time() >= $rotateAt); print LOG $l; } close(LOG); exit 0; sub openLog { my ($day, $month, $year) = (localtime)[3,4,5]; my $logfile = $logfilePrefix.sprintf("%04d%02d%02d", $year+1900, $month+1, $day); $rotateAt = timelocal(0, 0, 0, (localtime(time() + 86400))[3,4,5]); open(LOG, ">> $logfile") || die "couldn't write to $logfile: $!\n"; LOG->autoflush(1); } sub reopenLog { close(LOG); openLog(); } 

进一步阅读: http : //httpd.apache.org/docs/2.2/logs.html#piped