Менее подробный экран отладки в Catalyst?
На моем этапе сервер я хотел бы активировать отладку, чтобы клиенты могли найти ошибки для себя, прежде чем приложение выходит на рабочий сервер.
НО я хочу только первую часть сообщения, а не запрос или данные сеанса.
Например: не удалось отобразить шаблон "templates/home.tt2: ошибка файла - templates/inc/heater: не найдено".
Этого сообщения достаточно для меня и моего клиента, чтобы увидеть, что вызов "header" написан с ошибкой.
Запрос содержит много не относящейся к делу информации для клиента, но также имеет МНОГО внутренней развивающейся информации, которая должна быть постоянно скрыта!!
С уважением
3 ответа
То, что вы хотите, это переопределить Катализатор 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;
}