Apache может быть настроен для записи в access.log или error.log с другим расширением?

Пока NetApp может представить LUN и волоконно-оптическому каналу и интерфейсам iSCSI одновременно, это не должна быть проблема. Однако, чтобы сделать это хост ESXI должен был бы быть членом кластера, которого другие две машины являются членами, иначе объем станет поврежденным.

0
задан 8 March 2010 в 21:15
1 ответ

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, чем каналы это - журнал к STDIN того сценария снова с помощью следующего синтаксиса

CustomLog |/path/to/logger.pl combined

Ваш сценарий читает строки журнала на STDIN и пишет им в файл журнала, которые называют Вас, может выбрать и измениться свободно.

Сценарий мог выглядеть примерно так

#!/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

1
ответ дан 4 December 2019 в 23:09

Теги

Похожие вопросы