Логгер
SDK логирует события в файл. По умолчанию он выключен — ChatCenterUI создаётся без ChatLoggerConfig, и логирование не ведётся ни в файл, ни в консоль. Если конфиг передан, но logLevel не задан явно, применяется VERBOSE (см. таблицу ниже).
Уровни логирования (ChatLogLevel)
| Уровень | Описание |
|---|---|
VERBOSE | Максимально подробные логи, только для разработки |
DEBUG | Подробные логи для отладки |
INFO | Основные события SDK |
WARNING | Предупреждения и нештатные ситуации |
ERROR | Только критические ошибки (рекомендуется для production) |
ChatLogLevel.FLUSHВ enum ChatLogLevel есть значение FLUSH — это внутренний триггер SDK для сброса буфера логов в файл. Не передавайте его в ChatLoggerConfig.logLevel: фильтр SDK отсечёт все записи и логирование фактически отключится. Для принудительного сброса используйте LoggerEdna.flushLogs().
ChatLoggerConfig
val loggerConfig = ChatLoggerConfig(
applicationContext = applicationContext,
logLevel = ChatLogLevel.VERBOSE,
logFileSize = 1,
logFileMaxCount = 5,
shouldShowSendMenu = true
)
chatCenterUI = ChatCenterUI(applicationContext, loggerConfig)
Порядок параметров в таблице совпадает с порядком в конструкторе ChatLoggerConfig (пакет edna.chatcenter.core.logger).
| # | Параметр | Тип | Обязательный | По умолч. | Описание |
|---|---|---|---|---|---|
| 1 | applicationContext | Context | Да | — | Должен быть именно applicationContext (init-блок бросит IllegalArgumentException иначе) |
| 2 | logLevel | ChatLogLevel | Нет | VERBOSE | Уровень логирования (см. таблицу выше; не используйте FLUSH) |
| 3 | logFileSize | Int | Нет | 1 | Максимальный размер файла лога, МБ |
| 4 | logFileMaxCount | Int | Нет | 5 | Максимальное количество файлов логов (ротация) |
| 5 | logInterceptor | ChatLoggerConfig.LogInterceptor? (var) | Нет | null | Кастомный перехватчик. Поле изменяемое — можно установить и после создания конфига: loggerConfig.logInterceptor = .... См. ниже |
| 6 | shouldShowSendMenu | Boolean | Нет | true | Показывать меню отправки логов при встряхивании устройства |
logLevel = ChatLogLevel.ERRORилиWARNING. SDK логируетChatUser.identifierна уровнеINFO— приINFOили ниже идентификатор попадёт в логи устройства, что нарушает требования по работе с ПДн при использовании реального ID.shouldShowSendMenu = false. Меню «отправить логи» по shake-жесту удобно для разработчиков, но недопустимо для конечных пользователей.
Кастомный перехватчик логов (LogInterceptor)
Чтобы отправить логи SDK в Crashlytics, Sentry или другой инструмент, реализуйте вложенный интерфейс ChatLoggerConfig.LogInterceptor:
val loggerConfig = ChatLoggerConfig(
applicationContext = applicationContext,
logLevel = ChatLogLevel.DEBUG,
logInterceptor = object : ChatLoggerConfig.LogInterceptor {
override fun addLogEvent(logLevel: ChatLogLevel, logText: String) {
// Например, отправка в Crashlytics
FirebaseCrashlytics.getInstance().log("[$logLevel] $logText")
}
}
)
ChatLoggerConfig.LogInterceptorЭто вложенный интерфейс внутри ChatLoggerConfig, не top-level. Импорт: import edna.chatcenter.core.logger.ChatLoggerConfig.LogInterceptor.
logLevel применяется до интерсептораSDK сначала отбрасывает записи с уровнем ниже config.logLevel, и только потом вызывает LogInterceptor.addLogEvent(...). Если в конфиге выставлено logLevel = ChatLogLevel.ERROR, то интерсептор не получит события уровня VERBOSE/DEBUG/INFO/WARNING. Если вы хотите в Crashlytics/Sentry все события, оставьте logLevel = VERBOSE и фильтруйте сами внутри addLogEvent.
Принудительный сброс логов (LoggerEdna.flushLogs())
Если нужно гарантированно дописать буфер логов в файл (например, перед отправкой crash-отчёта), вызовите статический метод:
LoggerEdna.flushLogs()
Импорт: import edna.chatcenter.core.logger.LoggerEdna.
LoggerEdna.flushLogs() срабатывает только после того, как SDK прошёл инициализацию (chatCenterUI.init(providerUid, appMarker, config) — именно init, а не конструктор ChatCenterUI). До завершения init(...) вызов flushLogs() молча ничего не делает.
Сбор логов через шейк
При shouldShowSendMenu = true (значение по умолчанию) пользователь может выгрузить логи прямо из приложения: открыть экран чата, встряхнуть устройство — появится меню «отправить логи» с выбором способа отправки (почта, мессенджер и т. п.). Сценарий рассчитан на debug-сборки и QA — в production отключите шейк через shouldShowSendMenu = false.
Результат шейка: меню отправки логов

На эмуляторе
Эмулятор не реагирует на физический shake, используйте команду:
adb emu sensor set acceleration 50:50:50; sleep 0.1; adb emu sensor set acceleration 0:0:0
Иногда эмулятор создаёт несколько архивов подряд — отправьте любой, остальные игнорируйте.
Прямой доступ через Device Explorer
Подключите устройство к Android Studio, откройте View → Tool Windows → Device Explorer, перейдите в data/data/<package>/files/logs/ и скопируйте файлы.
Расположение вкладки "Device Explorer"

Папки "data/data" и "logs"


Связанные разделы
- Расширенные настройки — рекомендации по подготовке релиза, включая
ChatLogLevel.ERRORв production. - Инициализация SDK —
ChatLoggerConfigпередаётся в конструкторChatCenterUI. - Пример подключения логгера в демо-приложении.