Non-fatals aka пользовательские ошибки

За работу с нон-фаталами отвечает FeatureConfiguration.assertReporter. Сперва необходимо убедиться, что структура Configuration содержит этот кейс при создании TracerService.

Способы инициализации

  • Данный метод неявно добавляет .assertReporter в Configuration.
let tracerService = TracerFactory.tracerServiceForCrashReporting(token: "Ваш appToken")
  • Можно передать явно .assertReporter в параметр features, используя метод
let tracerService = TracerFactory.tracerService(token: "Ваш appToken", features: [.assertReporter()])
  • Либо создать Configuration самостоятельно и передать в метод
let configuration = Configuration(token: "Ваш appToken", features: [.assertReporter()]) let tracerService = TracerFactory.tracerService(configuration: configuration)

Описание параметров TracerNonFatalModel

  • message - текст нон-фатала
  • tags - дополнительная информация, отображаемая на вкладке Ключи внутри события
  • properties - дополнительная информация, отображаемая на вкладке Данные внутри события
  • fileName - имя файла
  • function - имя функции
  • line - номер строки
  • traceType - источник информации о потоке

Параметр traceType

  • current - вариант по умолчанию, использует текущее имя потока и текущий стектрейс, обрезая dropFirstSymbols фреймов с начала.
  • custom - вариант используется, когда у Вас уже есть стектрейс и его надо обернуть в событие. К стектрейсу также можно докинуть символы (есть нюансы, подробнее в статье Символизация). dropFirstSymbols работает аналогично current, только теперь применяется и к символам, и к стектрейсу. Помимо этого есть возможность задать своё имя потока. Если этого не сделать, будет использоваться текущее, как в current.

Дополнительные возможности properties

Для того, чтобы нон-фаталы группировались не по стектрейсу (поведение по умолчанию), а по особому признаку, можно передать в properties значение с ключом IssueKey. После этого появится возможность фильтровать события по данному ключу в общем списке нон-фаталов.

Также на стороне SDK после создания модели на этапе отправки происходит дополнительный процессинг properties. Поэтому следует избегать использования следующих ключей, так как вследствие обработки часть ключей могут быть перезаписаны.

  • ключ message - сюда SDK всегда записывает текст нон-фатала.
  • ключ file - сюда SDK может записывать комбинацию из fileName, function и line. Необходимым условием является наличие хотя бы одного из перечисленных параметров.

Способы отправки событий

  • Вариант 1
let nonFatal = TracerNonFatalModel(message: "User error") tracerService.send(nonFatal: nonFatal)
  • Вариант 2
let nonFatal = TracerNonFatalModel(message: "User error") tracerService.send(nonFatal, fileName: StaticString = #file, function: StaticString = #function, line: Int = #line)

Вариант 2 отличается тем, что в случае когда какое-либо из полей fileName, function или line модели будет nil, то оно перезапишется соответствующим параметром метода.