logger function
HTTP request/response logger middleware, modeled after HonoJS.
Prints an incoming line before the handler and an outgoing line with a
colored status code and elapsed time after it. Uses xxx as prefix when
the handler throws.
Respects the NO_COLOR environment variable (https://no-color.org).
app.use(logger());
Output:
--> GET /users
<-- GET /users 200 4ms
Custom printer:
app.use(logger((msg, [_]) => myLogSystem.info(msg)));
Implementation
Middleware logger([PrintFn? fn]) {
final log = fn ?? _defaultPrint;
return (Context c, Next next) async {
final method = c.req.method;
final path = c.req.path;
_emit(log, _Prefix.incoming, method, path);
final start = DateTime.now();
try {
await next();
} catch (_) {
_emit(log, _Prefix.error, method, path);
rethrow;
}
_emit(
log,
_Prefix.outgoing,
method,
path,
status: c.statusCode,
elapsed: _elapsed(start),
);
};
}