[英]Getting the request object outside a mod_perl handler
我想通过从mod_perl处理程序调用但没有请求对象($ r)的子例程登录到Apache日志文件。
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
可直接通过其他方式。
您可以使用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
Apache httpd配置文件上编写PerlOptions +GlobalRequest
。
有关详细信息,请参见perldoc Apache2::RequestUtil
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.