Перейти к основному содержимому
Версия: 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;

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