Искам да вляза в регистрационния файл на 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
е достъпен директно по друг начин.