sendLogEventsWithDio method

  1. @override
Future<void> sendLogEventsWithDio(
  1. List<LogEntry> entries,
  2. Map<String, String> userProperties,
  3. CancelToken cancelToken
)
override

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);
  });
}