logRequests function

Middleware logRequests ({void logger(String msg, bool isError) })

Middleware which prints the time of the request, the elapsed time for the inner handlers, the response's status code and the request URI.

If logger is passed, it's called for each request. The msg parameter is a formatted string that includes the request time, duration, request method, and requested path. When an exception is thrown, it also includes the exception's string and stack trace; otherwise, it includes the status code. The isError parameter indicates whether the message is caused by an error.

If logger is not passed, the message is just passed to print.

Implementation

Middleware logRequests({void logger(String msg, bool isError)}) =>
    (innerHandler) {
      if (logger == null) logger = _defaultLogger;

      return (request) {
        var startTime = DateTime.now();
        var watch = Stopwatch()..start();

        return Future.sync(() => innerHandler(request)).then((response) {
          var msg = _getMessage(startTime, response.statusCode,
              request.requestedUri, request.method, watch.elapsed);

          logger(msg, false);

          return response;
        }, onError: (error, StackTrace stackTrace) {
          if (error is HijackException) throw error;

          var msg = _getErrorMessage(startTime, request.requestedUri,
              request.method, watch.elapsed, error, stackTrace);

          logger(msg, true);

          throw error;
        });
      };
    };