sendLogEventsWithDio method
Implementation
@override
Future<void> sendLogEventsWithDio(List<LogEntry> entries,
Map<String, String> userProperties, CancelToken cancelToken) {
final userProps = {
for (var e in userProperties.entries) '_${e.key}': e.value
};
final body = entries
.map((e) {
final firstNewLine = e.line.indexOf("\n");
final (shortMessage, fullMessage) = firstNewLine > -1
? (
e.line.substring(0, firstNewLine),
e.line,
)
: (e.line, null);
final payload = GelfPayload(
logLevel: toLogLevel(e.logLevel),
host: host,
shortMessage: shortMessage,
fullMessage: fullMessage,
timestamp: e.ts,
);
return {
...payload.toJson(),
for (final entry in e.lineLabels.entries)
'_${entry.key}': entry.value,
...userProps,
};
})
.map((e) => json.encode(e))
.join('\n');
return _client
.post<dynamic>(
endpoint,
cancelToken: cancelToken,
data: body,
)
.then(
(response) => Future<void>.value(null),
// _logger.finest('sent logs.');
)
.catchError((Object err, StackTrace stackTrace) {
String? message;
if (err is DioException) {
if (err.response != null) {
message = 'response:${err.response!.data}';
}
}
_logger.warning(
'Error while sending logs to graylog. $message', err, stackTrace);
return Future<void>.error(err, stackTrace);
});
}