Менее подробный экран отладки в 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;
}
Другие вопросы по тегам