logRequests function
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 message
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 Function(String message, bool isError)? logger}) {
var defaultLogger = logger ?? _defaultLogger;
Handler middleware(Handler innerHandler) {
Future<Response> handler(Request request) async {
var startTime = DateTime.now();
var watch = Stopwatch()..start();
try {
var response = await innerHandler(request);
var msg = _message(startTime, response.statusCode, request.requestedUri,
request.method, watch.elapsed);
defaultLogger(msg, false);
return response;
} on HijackException {
rethrow;
} catch (error, stackTrace) {
var msg = _errorMessage(startTime, request.requestedUri, request.method,
watch.elapsed, error, stackTrace);
defaultLogger(msg, true);
rethrow;
}
}
return handler;
}
return middleware;
}