Apache 在mod_perl处理程序外部获取请求对象
我想从mod_perl处理程序调用的子例程登录到Apache日志文件,但该子例程没有请求对象($r) 虽然使用Apache 在mod_perl处理程序外部获取请求对象,apache,perl,apache2,mod-perl,Apache,Perl,Apache2,Mod Perl,我想从mod_perl处理程序调用的子例程登录到Apache日志文件,但该子例程没有请求对象($r) 虽然使用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 $global
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')
...
}
我已经为初始化
$globalr
设置了一个PerlFixupHandler
,但我想知道是否有更好的方法,或者是否可以通过其他方式直接使用$r
。您可以使用Apache2::RequestUtil
package Common;
use Apache2::RequestRec;
use Apache2::RequestUtil;
sub subroutine_that_also_logs {
my $r = Apache2::RequestUtil->request;
# some process you want using $r
}
如果此阶段是PerlFixupHandler,$r
具有完整的请求信息,例如MIME类型等
如果使用此方法,则必须在httpd.conf
apachehttpd配置文件上编写PerlOptions+GlobalRequest
有关详细信息,请参见
perldocapache2::RequestUtil
。是的,这正是我想要的。谢谢
package Common;
use Apache2::RequestRec;
use Apache2::RequestUtil;
sub subroutine_that_also_logs {
my $r = Apache2::RequestUtil->request;
# some process you want using $r
}