diff --git a/packages/talker_http_logger/lib/talker_http_logger.dart b/packages/talker_http_logger/lib/talker_http_logger.dart index 5e0376ee..71dff759 100644 --- a/packages/talker_http_logger/lib/talker_http_logger.dart +++ b/packages/talker_http_logger/lib/talker_http_logger.dart @@ -26,7 +26,13 @@ class TalkerHttpLogger extends InterceptorContract { required BaseResponse response, }) async { final message = '${response.request?.url}'; - _talker.logCustom(HttpResponseLog(message, response: response)); + + if (response.statusCode >= 400 && response.statusCode < 600) { + _talker.logCustom(HttpErrorLog(message, response: response)); + } else { + _talker.logCustom(HttpResponseLog(message, response: response)); + } + return response; } } @@ -48,8 +54,7 @@ class HttpRequestLog extends TalkerLog { String get key => TalkerLogType.httpRequest.key; @override - String generateTextMessage( - {TimeFormat timeFormat = TimeFormat.timeAndSeconds}) { + String generateTextMessage({TimeFormat timeFormat = TimeFormat.timeAndSeconds}) { var msg = '[$title] [${request.method}] $message'; final headers = request.headers; @@ -78,11 +83,44 @@ class HttpResponseLog extends TalkerLog { AnsiPen get pen => (AnsiPen()..xterm(46)); @override - String get title => TalkerLogType.httpResponse.key; + String get key => TalkerLogType.httpResponse.key; + + @override + String generateTextMessage({TimeFormat timeFormat = TimeFormat.timeAndSeconds}) { + var msg = '[$title] [${response.request?.method}] $message'; + + final headers = response.request?.headers; + + msg += '\nStatus: ${response.statusCode}'; + + try { + if (headers?.isNotEmpty ?? false) { + final prettyHeaders = encoder.convert(headers); + msg += '\nHeaders: $prettyHeaders'; + } + } catch (_) { + // TODO: add handling can`t convert + } + return msg; + } +} + +class HttpErrorLog extends TalkerLog { + HttpErrorLog( + String title, { + required this.response, + }) : super(title); + + final BaseResponse response; + + @override + AnsiPen get pen => AnsiPen()..red(); + + @override + String get key => TalkerLogType.httpError.key; @override - String generateTextMessage( - {TimeFormat timeFormat = TimeFormat.timeAndSeconds}) { + String generateTextMessage({TimeFormat timeFormat = TimeFormat.timeAndSeconds}) { var msg = '[$title] [${response.request?.method}] $message'; final headers = response.request?.headers;