LogInterceptor
jaumard opened this issue · 5 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