繁体   English   中英

在mod_perl处理程序之外获取请求对象

[英]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 STDERRwarn但我想使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM