error static method

void error(
  1. {dynamic error,
  2. StackTrace? stacktrace,
  3. required String library,
  4. required String event}
)

Log the given event as an error with the highest severity level

The severity can be Level.INFO if error is an instance of ResponseError.

Implementation

static void error({
  dynamic error,
  StackTrace? stacktrace,
  required String library,
  required String event,
}) {
  final ignoredLibs = [
    // Add here
  ];
  if (ignoredLibs.contains(library)) {
    return;
  }

  final String errorMessage = "Library: [$library]\nEvent: [$event]";
  StackTrace? logstacktrace = stacktrace;
  if (logstacktrace == null || logstacktrace.toString().isEmpty) {
    logstacktrace = StackTrace.current;
  }

  if (kReleaseMode) {
    dynamic parsedError = error;
    if (error is DioException) {
      if (error.type == DioExceptionType.badResponse) {
        parsedError =
            "Api error response: ${error.response?.data.toString() ?? "No data given"}";
        DatadogSdk.instance.logs?.warn(
          errorMessage,
          errorKind: event,
          errorMessage: parsedError.toString(),
          errorStackTrace: logstacktrace,
          attributes: {"userId": _userId, "clientId": _clientId},
        );
      } else if (error.type == DioExceptionType.cancel) {
        // do not log as it was cancelled intentionally
        return;
      }
    } else {
      DatadogSdk.instance.logs?.error(
        errorMessage,
        errorKind: event,
        errorMessage: parsedError.toString(),
        errorStackTrace: logstacktrace,
        attributes: {"userId": _userId, "clientId": _clientId},
      );
    }
  }

  developer.log(
    errorMessage,
    name: "ERR",
    error: error,
    stackTrace: Trace.from(logstacktrace).terse,
    level: error is ResponseError ? Level.INFO.value : Level.SEVERE.value,
  );
}