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 jsonObject =
      LokiPushBody([LokiStream(labelsString, entries)]).toJson();
  final jsonBody = json.encode(jsonObject, toEncodable: (dynamic obj) {
    if (obj is LogEntry) {
      return {
        'ts': _dateFormat.format(obj.ts.toUtc()),
        'line': [
          obj.lineLabels.entries
              .map((entry) =>
                  '${entry.key}=${_encodeLineLabelValue(entry.value)}')
              .join(' '),
          obj.line,
        ].join(' - ')
      };
    }
    return obj.toJson();
  });
  return _client
      .post<dynamic>(
        'https://$server/api/prom/push',
        cancelToken: cancelToken,
        data: jsonBody,
        options: Options(
          headers: <String, String>{
            HttpHeaders.authorizationHeader: authHeader,
          },
          contentType: ContentType(
                  ContentType.json.primaryType, ContentType.json.subType)
              .value,
        ),
      )
      .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 loki. $message', err, stackTrace);
    return Future<void>.error(err, stackTrace);
  });
}