Отладка и логирование
SDK предоставляет инструменты для отладки и сбора логов.
Режим отладки
Включение при инициализации
javascript
await SDK.init({
debug: true, // Вывод внутренних логов SDK в консоль
debugLog: true, // Вызывать onDebugMessage для всех логов SDK
// ...
});Переключение во время работы
javascript
// Включить режим отладки (аля SDK.init({ debug: true }))
SDK.debug(true);
// Выключить режим отладки
SDK.debug(false);Получение логов SDK
Для получения внутренних логов SDK используйте коллбэк onDebugMessage. Этот коллбэк работает когда debugLog: true и debug: false:
javascript
import { DebugMessageType } from '@vkontakte/calls-sdk';
await SDK.init({
debug: false, // Можно выключить вывод в консоль
debugLog: true, // Но получать логи через коллбэк
onDebugMessage: (type, ...args) => {
// type: DebugMessageType.ERROR | WARN | LOG | DEBUG
switch (type) {
case DebugMessageType.ERROR:
console.error('[SDK Error]', ...args);
break;
case DebugMessageType.WARN:
console.warn('[SDK Warn]', ...args);
break;
case DebugMessageType.LOG:
console.log('[SDK Log]', ...args);
break;
case DebugMessageType.DEBUG:
console.debug('[SDK Debug]', ...args);
break;
}
// Сохранить лог для последующей отправки
saveTolLogStorage(type, args);
}
});Добавление собственных логов
Вы можете добавлять свои сообщения в систему логирования SDK:
javascript
import { DebugMessageType } from '@vkontakte/calls-sdk';
// Логирование различных уровней
SDK.debugMessage(DebugMessageType.LOG, 'Пользователь нажал кнопку');
SDK.debugMessage(DebugMessageType.WARN, 'Предупреждение:', data);
SDK.debugMessage(DebugMessageType.ERROR, 'Ошибка:', error);
SDK.debugMessage(DebugMessageType.DEBUG, 'Отладочная информация:', details);Отправка логов на сервер
После завершения звонка можно отправить собранные логи на сервер для анализа:
javascript
try {
await SDK.uploadDebugLogs();
console.log('Логи успешно отправлены');
} catch (error) {
console.error('Не удалось отправить логи:', error);
}Важно
uploadDebugLogs() отправляет логи на бекенд сервиса звонков. Если у вас нет доступа к этому бекенду, использовать эту функцию нет смысла.
Функция работает только если включены параметры debug: true и debugLog: true.
Скачивание логов локально
Логи можно скачать локально через глобальную функцию в консоли браузера:
javascript
// В консоли браузера
window.__VKCallsSDKLogs__();Это скачает все логи, хранящиеся в localStorage, в виде JSON-файла.
Пример системы логирования
javascript
import * as SDK from '@vkontakte/calls-sdk';
import { DebugMessageType } from '@vkontakte/calls-sdk';
// Хранилище логов
const logs = [];
const MAX_LOGS = 5000;
function formatTimestamp() {
const now = new Date();
return `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}:${now.getSeconds().toString().padStart(2, '0')}.${now.getMilliseconds().toString().padStart(3, '0')}`;
}
function addLog(level, ...args) {
const entry = {
timestamp: formatTimestamp(),
level,
data: args
};
logs.push(entry);
// Ограничить размер хранилища
if (logs.length > MAX_LOGS) {
logs.shift();
}
}
await SDK.init({
debugLog: true,
onDebugMessage: (type, ...args) => {
const levelMap = {
[DebugMessageType.ERROR]: 'error',
[DebugMessageType.WARN]: 'warn',
[DebugMessageType.LOG]: 'log',
[DebugMessageType.DEBUG]: 'debug'
};
const level = levelMap[type] ?? 'log';
addLog(level, ...args);
// Вывод в консоль
if (type === DebugMessageType.ERROR) {
console.error('[SDK]', ...args);
} else if (type === DebugMessageType.WARN) {
console.warn('[SDK]', ...args);
}
},
onHangup: async (type, conversationId) => {
// Отправить логи при завершении звонка
try {
await SDK.uploadDebugLogs();
} catch (e) {
console.error('Не удалось отправить логи');
}
}
});
// Функция для получения логов
function getLogs() {
return [...logs];
}
// Очистка логов
function clearLogs() {
logs.length = 0;
}Полезные данные для отладки
При отладке проблем полезно собирать:
javascript
// Информация о браузере
console.log('Browser:', SDK.browser.browserName());
console.log('Version:', SDK.browser.browserVersion());
console.log('Mobile:', SDK.browser.isMobile());
console.log('OS:', SDK.browser.os());
// Устройства
console.log('Cameras:', SDK.browser.getCameras());
console.log('Microphones:', SDK.browser.getMicrophones());
// Разрешения
console.log('Camera permission:', SDK.browser.hasCameraPermission());
console.log('Mic permission:', SDK.browser.hasMicrophonePermission());
// Версия SDK
console.log('SDK version:', SDK.version());