Перейти к основному содержимому
Версия: 5.9.0

Настройки логирования

SDK логирует действия пользователя, сетевые запросы и ошибки в файл и OSLog. Файлы хранятся в Documents/Logs/ и ротируются по размеру. При сбоях в работе SDK прикрепите файлы к запросу в службу поддержки.

Уровень и параметры логирования задаются при инициализации SDK через ChatLoggerConfig.

Логирование отключено по умолчанию

По умолчанию логирование отключено, рекомендуется включать его только в тестовых сборках.

Базовая настройка

Задайте уровень логирования при создании ChatLoggerConfig:

let loggerConfig = ChatLoggerConfig(logLevel: .all) // Логировать все сообщения

// Или:
// let loggerConfig = ChatLoggerConfig(logLevel: .error) // Логировать только ошибки

let chatCenterSDK = ChatCenterUISDK(providerUid: "YOUR_PROVIDER_UID",
chatConfig: chatConfig,
loggerConfig: loggerConfig)

Доступные уровни логирования (ChatLogLevel):

ChatLogLevel реализует OptionSet — уровни можно комбинировать: [.info, .error].

  • .off: Отключает все логирование от SDK.
  • .info: Общая информация о работе SDK (операции, изменения состояния).
  • .rest: Данные REST сетевых запросов.
  • .webSocket: Сообщения из WebSocket.
  • .userInterface: События из UI, действия пользователя.
  • .error: Ошибки, которые могут привести к сбоям или некорректной работе.
  • .network: Составной уровень — объединяет .rest и .webSocket.
  • .all: Объединяет .info, .rest, .webSocket, .userInterface, .error.

Рекомендации по уровням:

  • Отладка и тестовые сборки.all. Полный объём данных для диагностики.
  • Релизные сборки.off. Логи не пишутся; чувствительные данные не попадают в файл и OSLog.
  • Логи пишутся через OSLog (subsystem io.edna.chatcenter.ui.logs) и в файл. В Console.app и Xcode фильтруйте по subsystem.

Дополнительные настройки

Размер и количество файлов логов задаются в ChatLoggerConfig.

init(logLevel: ChatLogLevel = .off, logFileSize: Int = 2, logFilesCount: Int = 10)

Параметры инициализатора ChatLoggerConfig:

ПолеТипОбязательныйОписание
logLevelChatLogLevelНет (default .off)Уровень логирования. .off — логирование отключено
logFileSizeInt (МБ)Нет (default 2)Максимальный размер одного файла лога
logFilesCountIntНет (default 10)Максимальное количество хранимых файлов логов. При достижении logFileSize запись переходит в новый файл, а самые старые файлы (по дате изменения) удаляются
Поля задаются только в инициализаторе

Все три поля не входят в публичный интерфейс — задаются при создании объекта и недоступны для чтения или изменения снаружи.

Пример использования:

// Включение логирования с уровнем .info
let loggerConfig = ChatLoggerConfig(logLevel: .info, logFileSize: 5, logFilesCount: 5)
let chatConfig = ChatConfig(transportConfig: chatTransportConfig, networkConfig: ChatNetworkConfig())
let chatCenterSDK = ChatCenterUISDK(providerUid: "YOUR_PROVIDER_UID", chatConfig: chatConfig, loggerConfig: loggerConfig)

Отправка логов

SDK показывает файл логов через системный share-sheet — встряхиванием устройства или программно.

Шейк-жест

На экране чата встряхните устройство — появится системный share-sheet с zip-архивом логов:

Меню отправки логов

Шейк-жест обрабатывается только на экране чата. Если логирование выключено (logLevel: .off), share-sheet не показывается.

Программный вызов share-sheet

Для вызова из кода приложения (например, в e2e-тестах) используйте метод EDNALogger.shareLogs(in:):

func shareLogs(in viewController: UIViewController)

ПолеТипОбязательныйОписание
viewControllerUIViewControllerДаКонтроллер, поверх которого показывается UIActivityViewController с zip-архивом логов. View контроллера должна быть загружена и присоединена к окну (viewIfLoaded?.window != nil).

Пример:

@objc func sendLogsTapped() {
// ⚠ MigrationServiceLocator — переходный API (см. предупреждение ниже).
// Изолируйте этот вызов одной debug-функцией, чтобы при переходе
// на стабильное API замена была точечной.
MigrationServiceLocator.logger?.shareLogs(in: self)
}
MigrationServiceLocator — переходный API

В текущей версии единственный публичный доступ к активному логгеру — через MigrationServiceLocator.logger. API нестабилен и может быть переведён в internal в одном из следующих мажорных релизов SDK — код, использующий его напрямую, перестанет компилироваться.

Рекомендации:

  • Не вызывайте MigrationServiceLocator из production-flow. Допустимый сценарий — debug-кнопка «Отправить логи в поддержку», изолированная за #if DEBUG или собственным feature-flag.
  • Если вам нужен перехват логов (а не share-sheet), используйте делегатный метод ChatCenterUISDKDelegate.didLog — это стабильное API.
  • Следите за Changelog — при появлении стабильной замены пример выше будет обновлён.
Когда shareLogs(in:) ничего не делает

Share-sheet не показывается, если:

  • loggerConfig не передан в конструктор SDK — активного логгера нет, MigrationServiceLocator.logger равен nil;
  • logLevel: .off — логгер создан, но метод возвращает управление без действий;
  • view контроллера не загружена или не в окне (viewIfLoaded?.window == nil).

Связанные разделы