Jaguar-dart / client

Contains various packages for client side

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

LogInterceptor

jaumard opened this issue · comments

Would be nice to have by default a logInterceptor that we can add if you want.

We can put log level on it like BASIC / FULL.

BASIC will print: starting POST https://myurl result POST https://myurl status 201

FULL will print:
starting POST https://myurl with data {all the data pretty printed json/form...} result POST https://myurl status 201 with data {all the data pretty printed json/form...}

it will help a lot during debug

Here is what I've done on my project


class LogInterceptor extends Interceptor {

  static final _log = Logger('LogInterceptor');

  @override
  FutureOr<void> before(RouteBase route) {
    var query = '?';
    route.getQuery.forEach((key, value) => query += '$key=$value&');
    _log.fine('==> ${route.getUrl}$query');
    route.getHeaders.forEach((key, value) => _log.fine('==> $key: $value'));
    if (route is RouteWithBody) {
      _log.fine('\n${route.getBody()}');
    }
    return super.before(route);
  }

  @override
  FutureOr after(StringResponse response) {
    _log.fine('<== ${response.statusCode} ${response.request.url}');
    response.headers.forEach((key, value) => _log.fine('<== $key: $value'));
    _log.fine('\n${response.body}');
    return response;
  }
}
    var query = '?';
    route.getQuery.forEach((key, value) => query += '$key=$value&');
    _log.fine('==> ${route.getUrl}$query');

This can be achieved with route.url, i think.

This is a good idea. Can you contribute it in resty codebase? Then we make it generic.

@tejainece route.url is not accessible on RouteBase.
I'll try to make a PR when I've some time :)

Oh. We have to move it to RouteBase