Логирование

Lighthouse — это мощный инструмент для аудита веб-приложений, разработанный Google, который позволяет анализировать производительность, доступность, SEO и лучшие практики веб-разработки. Эффективное логирование играет ключевую роль при работе с Lighthouse, особенно когда речь идет о программном использовании через Node.js API или кастомных скриптах для автоматизации.


Основы логирования

Lighthouse использует встроенную систему логирования, основанную на уровне логов и консольных сообщениях. Основные уровни логирования:

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

Уровень логирования указывается при запуске программы через объект конфигурации:

const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');

(async () => {
  const chrome = await chromeLauncher.launch({ chromeFlags: ['--headless'] });
  const options = {
    port: chrome.port,
    logLevel: 'info'
  };
  const runnerResult = await lighthouse('https://example.com', options);
  await chrome.kill();
})();

В примере выше logLevel: ‘info’ обеспечивает вывод стандартных сообщений о запуске, прогрессе и завершении аудита.


Кастомизация логирования

Для более гибкого контроля можно использовать собственные логгеры. Lighthouse поддерживает возможность подмены стандартного console.log через объект config.settings. Пример:

const customLogger = {
  log: (message) => {
    // Пример: запись в файл
    require('fs').appendFileSync('lighthouse.log', message + '\n');
  },
  warn: (message) => {
    console.warn('[WARN]', message);
  },
  error: (message) => {
    console.error('[ERROR]', message);
  }
};

const options = {
  port: chrome.port,
  logLevel: 'silent',
  outputLogger: customLogger
};

Такой подход позволяет интегрировать Lighthouse в существующую систему мониторинга или CI/CD пайплайн, сохраняя все логи в нужном формате.


Асинхронное логирование и события

Lighthouse генерирует события во время выполнения аудита. Используя API Node.js, можно подписываться на эти события для отслеживания прогресса или выполнения определенных действий при ошибках:

const { EventEmitter } = require('events');

const eventEmitter = new EventEmitter();

eventEmitter.on('lh:status', (status) => {
  console.log('Статус:', status);
});

eventEmitter.on('lh:error', (error) => {
  console.error('Ошибка Lighthouse:', error);
});

Каждый ключевой этап аудита (запуск Chrome, загрузка страницы, вычисление метрик) сопровождается событиями, которые могут быть полезны для детального анализа производительности.


Интеграция с CI/CD

Логирование становится критически важным при использовании Lighthouse в автоматических тестах. Настройка CI/CD пайплайна требует:

  1. Сохранение логов в файл для последующего анализа.
  2. Выбор уровня логирования — часто используют warn или error, чтобы уменьшить шум.
  3. Парсинг логов для автоматической генерации отчетов.

Пример использования с Jest:

test('Lighthouse audit', async () => {
  const runnerResult = await lighthouse('https://example.com', { logLevel: 'warn' });
  const reportJson = runnerResult.report;
  require('fs').writeFileSync('report.json', reportJson);
});

Такой подход позволяет автоматически фиксировать критические проблемы без лишнего потока информации в консоли.


Выводы по логированию

  • Уровни логирования позволяют гибко управлять количеством информации.
  • Кастомные логгеры интегрируют Lighthouse в существующие системы.
  • Подписка на события обеспечивает асинхронный контроль и мониторинг выполнения.
  • CI/CD интеграция требует хранения и анализа логов, что делает автоматическое логирование неотъемлемой частью процесса.

Эффективная настройка логирования в Lighthouse обеспечивает прозрачность работы, облегчает отладку и повышает надежность аудита веб-приложений.