在我的阶段服务器中,我想激活调试,以便客户端可以在应用程序进入生产服务器之前自己发现错误。
但我只想要消息的第一部分,而不是请求或会话数据。
例如:无法呈现模板“templates/home.tt2:文件错误 - 模板/inc/heater:未找到”。
该消息足以让我和我的客户看到“标题”调用拼写错误。
Request 中有很多与客户无关的信息,但也有很多应该一直隐藏的内部开发信息!
问候
在我的阶段服务器中,我想激活调试,以便客户端可以在应用程序进入生产服务器之前自己发现错误。
但我只想要消息的第一部分,而不是请求或会话数据。
例如:无法呈现模板“templates/home.tt2:文件错误 - 模板/inc/heater:未找到”。
该消息足以让我和我的客户看到“标题”调用拼写错误。
Request 中有很多与客户无关的信息,但也有很多应该一直隐藏的内部开发信息!
问候
您想要的是覆盖 Catalyst 的dump_these
方法。这将返回要在 Catalyst 的错误调试页面上显示的内容列表。
默认实现如下所示:
sub dump_these {
my $c = shift;
[ Request => $c->req ],
[ Response => $c->res ],
[ Stash => $c->stash ],
[ Config => $c->config ];
}
但是您可以使其更具限制性,例如
sub dump_these {
my $c = shift;
return [ Apology => "We're sorry that you encountered a problem" ],
[ Response => substr($c->res->body, 0, 512) ];
}
您将dump_these
在您的应用程序的主模块中定义 - 您将use Catalyst
.
我有一个类似的问题,我通过覆盖 Catalyst 方法解决了这个问题log_request_parameters
。
像这样的东西(正如@mob所说,把它放在你的主模块中):
sub log_request_parameters {
my $c = shift;
my %all_params = @_;
my $copy = Clone::clone(\%all_params); # don't change the 'real' request params
# Then, do anything you want to only print what matters to you,
# for example, to hide some POST parameters:
my $body = $copy->{body} || {};
foreach my $key (keys %$body) {
$body->{$key} = '****' if $key =~ /password/;
}
return $c->SUPER::log_request_parameters( %$copy );
}
但是,如果您不希望显示任何 GET/POST 参数,您也可以简单地在开头返回。
好吧,在您的情况下,我没有想到更明显的解决方案:您可以简单地将日志级别设置为高于debug
,这将阻止debug
显示这些日志,但会保留error
日志:
# (or a similar condition to check you are not on the production server)
if ( !__PACKAGE__->config->{dev} ) {
__PACKAGE__->log->levels( 'warn', 'error', 'fatal' ) if ref __PACKAGE__->log;
}