[Moscow.pm] Mojo: логгирование запросов

Ivan Petrov i.petro.77.00 на gmail.com
Чт Июл 19 04:41:45 PDT 2012


> Если с хуками не сложится, всегда можно решить проблему "в лоб":

> 1. Старый хендлер переименовываем из blabla_handler например в
> blabla_handler_raw
> 2. В blabla_handler_raw делаем минимальные изменения - нужно вернуть или
> положить в стэш кодификатор, строку или типа того, по которому мы узнаем, что
> было возвращено
> 3. В новом blabla_handler пишем обертку с замером времени и записью в лог



вопрос с замером времени можно сделать прямо из бриджа, как-то так:

sub do_log {
    my ($self) = @_;

    my $req_body = $self->req->to_string;
    my $started_time = time;
    $self->stash('guard' => guard { save_log $req_body, time -
    $started_time  });

    return 1;
}

поскольку в конце Mojo почистит стеши то и гуард выдернется.
но это выглядит как хак.

если копать в сторону хуков, то можно опять же нужным контроллерам в
стеш класть пометку какую-то а в хуке смотреть есть ли такая пометка и
если есть класть в лог вместе со временем.

но это опять выглядит как хак


> (А может лучше рассмотреть возможность изменить проект так, чтобы он был такой
> весь из себя RESTfull и по url + коду возврата становилось ясно, что
> спрашивалось и что получили?)


да в общем-то так и есть.

логгирование нужно чисто для *временного* мониторинга что и как происходит.

примерно так: пришел багрепорт что вот этот роут выдает чет не то, с
точки зрения клиента. у нас роут покрыт тестами довольно хорошо,
соответственно нужен анализ действительно ли там что-то "не то", в каких
случаях это "не то" и т п. мы ставим данный роут на логгирование и
сабмитер бага пытается его повторить, ну а далее разбираются логи
запросов (и вот теперь еще хотим и логи ответов). после разбора
полетов случай попадает в тесты, логгирование  на роут убирается

соответственно из задачи вытекает что модифицировать контроллеры
совсем не хочется.



Подробная информация о списке рассылки Moscow-pm