Настройки логирования
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:
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
logLevel | ChatLogLevel | Нет (default .off) | Уровень логирования. .off — логирование отключено |
logFileSize | Int (МБ) | Нет (default 2) | Максимальный размер одного файла лога |
logFilesCount | Int | Нет (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)
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
viewController | UIViewController | Да | Контроллер, поверх которого показывается 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).
Связанные разделы
- Настройки инициализации SDK — передача
loggerConfigпри инициализации - Делегат SDK — метод
didLogдля перехвата логов в свою систему (не вызывается приlogLevel: .off) - Сообщить об ошибке — как отправить логи в поддержку
- Решение проблем — диагностика с помощью логов