generateTextMessage method
Internal method that generates a complete message about the event
See examples:
TalkerLog
-> TalkerLog.generateTextMessage
TalkerException
-> TalkerException.generateTextMessage
TalkerError
-> TalkerError.generateTextMessage
Implementation
@override
String generateTextMessage({
TimeFormat timeFormat = TimeFormat.timeAndSeconds,
}) {
final StringBuffer msg = StringBuffer();
msg.write('[$title]');
msg.write(' [${request.method}]');
msg.writeln(' $message');
final Map<String, String> headers = {...request.headers};
// HTTP headers are case-insensitive by standard
_replaceHiddenHeaders(headers);
if (settings.printRequestCurl) {
msg.writeln('[cURL] ${request.toCurl(headers: headers)}');
}
if (settings.printRequestHeaders && headers.isNotEmpty) {
try {
msg.writeln('Headers: ${convert(headers)}');
} catch (error, stackTrace) {
msg.writeln(
'Headers: <failed to convert headers: $error\nstackTrace: $stackTrace>',
);
}
}
if (settings.printRequestData) {
switch (request) {
case http.Request req when req.body.isNotEmpty:
late final dynamic jsonData;
try {
jsonData = jsonDecode(req.body);
} catch (_) {
jsonData = null;
}
try {
if (jsonData != null) {
msg.writeln('Data: ${convert(jsonData)}');
break;
} else {
msg.writeln('Data: ${req.body}');
break;
}
} catch (error, stackTrace) {
msg.writeln(
'Data: <failed to convert data: $error\nstackTrace: $stackTrace>',
);
}
break;
case http.MultipartRequest req
when req.fields.isNotEmpty || req.files.isNotEmpty:
msg.writeln('Data: ${convert(
{
...req.fields,
for (final http.MultipartFile file in req.files)
file.field: file.filename ?? ''
},
)}');
break;
case Request req when req.body != null:
try {
msg.writeln('Data: ${convert(req.body)}');
} catch (error, stackTrace) {
msg.writeln(
'Data: <failed to convert data: $error\nstackTrace: $stackTrace>',
);
}
break;
default:
break;
}
}
return msg.toString().trimRight();
}