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

Логгер

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).

#ПараметрТипОбязательныйПо умолч.Описание
1applicationContextContextДаДолжен быть именно applicationContext (init-блок бросит IllegalArgumentException иначе)
2logLevelChatLogLevelНетVERBOSEУровень логирования (см. таблицу выше; не используйте FLUSH)
3logFileSizeIntНет1Максимальный размер файла лога, МБ
4logFileMaxCountIntНет5Максимальное количество файлов логов (ротация)
5logInterceptorChatLoggerConfig.LogInterceptor? (var)НетnullКастомный перехватчик. Поле изменяемое — можно установить и после создания конфига: loggerConfig.logInterceptor = .... См. ниже
6shouldShowSendMenuBooleanНетtrueПоказывать меню отправки логов при встряхивании устройства
Production-сборка
  • 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"

Расположение вкладки &quot;Device Explorer&quot;

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

Папка &quot;data/data&quot;

Папка &quot;logs&quot;

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