Логирование операций

Bliss.js предоставляет мощные инструменты для организации и ведения логов в приложениях на JavaScript. Логирование является ключевым элементом отладки и мониторинга работы приложений, особенно при управлении сложными асинхронными процессами и событиями пользовательского интерфейса.

Основные возможности логирования

Bliss.js реализует несколько уровней логирования, которые позволяют структурировать сообщения и фильтровать их в зависимости от важности:

  • debug — сообщения для детальной отладки, обычно используются во время разработки.
  • info — информационные сообщения, отражающие нормальное выполнение программы.
  • warn — предупреждения о потенциальных проблемах, не влияющих на выполнение.
  • error — ошибки, которые могут нарушать работу приложения.
  • fatal — критические ошибки, требующие немедленного вмешательства.

Каждый уровень логирования можно настроить отдельно, направляя сообщения в разные обработчики или хранилища.

Создание логгера

Для работы с логами используется объект Logger. Он создается через Bliss.logger() и поддерживает конфигурацию нескольких каналов вывода:

const logger = Bliss.logger({
    level: 'debug',
    channels: {
        console: { enabled: true },
        file: { path: './logs/app.log', enabled: true }
    }
});

Пояснения к конфигурации:

  • level — минимальный уровень сообщений, который будет логироваться.
  • channels — список каналов вывода. Каналы могут включать консоль, файлы, удаленные серверы или пользовательские функции.
  • Каждый канал можно включить или отключить, а также задать отдельные параметры форматирования и фильтрации.

Логирование сообщений

После создания логгера, записи производятся через методы, соответствующие уровням логирования:

logger.debug('Инициализация модуля завершена');
logger.info('Пользователь вошел в систему');
logger.warn('Не удалось загрузить часть данных');
logger.error('Ошибка при сохранении файла');
logger.fatal('Сбой работы приложения');

Каждое сообщение автоматически сопровождается меткой времени и уровнем. Bliss.js поддерживает расширенные форматы:

logger.info({
    message: 'Загрузка данных завершена',
    module: 'DataService',
    duration: '120ms'
});

Асинхронное логирование

Bliss.js эффективно обрабатывает асинхронные операции, обеспечивая последовательность логов даже при параллельном выполнении задач:

async function fetchData() {
    try {
        logger.debug('Начало запроса к серверу');
        const response = await fetch('/api/data');
        const data = await response.json();
        logger.info({ message: 'Данные получены', data });
    } catch (err) {
        logger.error({ message: 'Ошибка запроса', error: err });
    }
}

fetchData();

Асинхронные методы логгера гарантируют, что сообщения не теряются, даже если поток событий интенсивный.

Форматирование и фильтры

Bliss.js позволяет настраивать формат сообщений с помощью шаблонов и фильтров:

logger.setFormat(({ level, message, time }) => `[${time}] [${level.toUpperCase()}]: ${message}`);

logger.setFilter((log) => log.level !== 'debug'); // исключить debug из вывода

Преимущества фильтров:

  • Исключение ненужных сообщений из канала вывода.
  • Возможность направлять разные уровни логов в отдельные хранилища.
  • Оптимизация производительности за счет уменьшения количества операций записи.

Логирование событий DOM и пользовательских действий

Bliss.js тесно интегрируется с манипуляциями DOM, позволяя отслеживать события и действия пользователей:

Bliss.on(document, 'click', 'button.trackable', (event) => {
    logger.info({
        message: 'Нажата кнопка',
        id: event.target.id,
        classes: event.target.className
    });
});

Это позволяет вести подробный учет действий пользователей и анализировать поведение интерфейса.

Хранение и ротация логов

Для долговременного хранения Bliss.js поддерживает файловое логирование с автоматической ротацией:

const fileLogger = Bliss.logger({
    channels: {
        file: {
            path: './logs/app.log',
            maxSize: 5 * 1024 * 1024, // 5 MB
            maxFiles: 10
        }
    }
});

Параметры ротации позволяют ограничивать размер файла и количество архивов, предотвращая переполнение диска.

Расширение логирования

Bliss.js предоставляет возможность подключения кастомных обработчиков:

logger.addChannel('http', {
    enabled: true,
    send: (log) => fetch('https://logserver.com', {
        method: 'POST',
        body: JSON.stringify(log)
    })
});

Это открывает возможность интеграции с внешними системами мониторинга, аналитики или алертинга.

Практические рекомендации

  • Использовать разные уровни логов для разных сред: debug в разработке, warn/error в продакшене.
  • Логи должны содержать метки времени и идентификаторы модулей для упрощения анализа.
  • Асинхронные операции логирования должны обрабатываться через встроенные методы, чтобы избежать потери данных.
  • Фильтры и ротация помогают поддерживать масштабируемость и управляемость логов в крупных приложениях.

Логирование в Bliss.js — это комплексный инструмент, который сочетает гибкость конфигурации, поддержку асинхронных операций и возможности интеграции с внешними сервисами, позволяя создавать устойчивые и отслеживаемые приложения.