Я хочу войти в файл журнала Apache из подпрограммы, которая вызывается из обработчика mod_perl, но не имеет объекта запроса ($ r).
sub handler {
my ($r) = shift;
...
Common::subroutine_that_also_logs();
...
}
package Common;
sub subroutine_that_also_logs {
...
# $r->log->info('cannot do this')
...
}
При использовании print STDERR
или warn
работает, но я хочу использовать Apache2 :: Log для получения дополнительной информации о запросе в журнале: -
[Fri May 30 16:12:37 2014] [info] [client 123.123.123.123] cannot do this
вместо просто
cannot do this
Я хочу избежать глобальной инициализации в обработчике, поскольку это означало бы обновление нескольких сотен обработчиков: -
my $globalr;
sub handler {
$globalr = shift;
...
Common::subroutine_that_also_logs();
}
package Common;
sub subroutine_that_also_logs {
...
$globalr->log->info('can try this')
...
}
Я установил один PerlFixupHandler
для инициализации $globalr
, но мне интересно, есть ли лучший способ или $r
доступен напрямую другими способами.