webpack использует многоуровневую систему логирования, разделяя
сообщения на пользовательские логи сборки, логи компилятора и
инфраструктурные сообщения, которые генерируются внутренними
подсистемами. Параметр infrastructureLogging отвечает за
управление уровнем и форматом логов, относящихся к внутренней
инфраструктуре webpack: файловым наблюдателям, кешированию, resolver’ам
модулей, плагинам и процессам компиляции.
Инфраструктурные логи отличаются от обычных сообщений сборки тем, что они отражают работу внутренних механизмов webpack, а не результат сборки как таковой. В них попадают:
Эти логи предназначены для отладки поведения сборщика, а не для конечного пользователя сборки.
Конфигурация задаётся в объекте webpack.config.js:
module.exports = {
infrastructureLogging: {
level: 'info'
}
};
Полная форма включает дополнительные параметры:
module.exports = {
infrastructureLogging: {
level: 'info',
debug: false,
colors: true,
appendOnly: false
}
};
Каждый параметр влияет на способ вывода диагностической информации.
Параметр level управляет детализацией сообщений
инфраструктуры. Webpack поддерживает несколько уровней, упорядоченных по
возрастанию количества выводимой информации:
Полное отключение инфраструктурных логов.
infrastructureLogging: {
level: 'none'
}
Используется в production-сборках, где важно минимизировать любой дополнительный вывод и ускорить выполнение.
Вывод только критических ошибок инфраструктуры. Сюда относятся сбои файловой системы, невозможность чтения кеша, ошибки resolver’а.
infrastructureLogging: {
level: 'error'
}
Подходит для стабильных окружений, где требуется фиксировать только сбои.
Добавляет предупреждения к ошибкам. Например, deprecated-опции внутренних модулей или потенциально проблемные операции кеширования.
infrastructureLogging: {
level: 'warn'
}
Этот уровень часто используется в CI-средах для контроля качества конфигурации.
Информационный уровень, включающий основные события инфраструктуры: инициализацию watcher’ов, создание кеша, подключение resolver’ов.
infrastructureLogging: {
level: 'info'
}
Является балансом между диагностикой и шумом в консоли.
Расширенный уровень логирования. Добавляет детализированные сообщения о внутренних операциях webpack.
infrastructureLogging: {
level: 'log'
}
Применяется при глубокой отладке поведения сборки, особенно при сложных конфигурациях с множеством плагинов.
Максимально подробный режим.
infrastructureLogging: {
level: 'verbose'
}
Включает почти все внутренние сообщения, включая низкоуровневые операции файловой системы и детальные шаги resolver’а.
Используется исключительно для диагностики сложных проблем производительности или некорректного поведения плагинов.
infrastructureLogging не заменяет
stats.logging, так как они управляют разными слоями
вывода:
stats.logging — логика сборки (chunks, modules,
assets)infrastructureLogging — внутренняя инфраструктура
webpackПример комбинированной настройки:
module.exports = {
stats: {
logging: 'normal'
},
infrastructureLogging: {
level: 'warn'
}
};
Такая конфигурация позволяет видеть только предупреждения инфраструктуры, не перегружая вывод данными сборки.
Параметр debug включает отладочные сообщения для
выбранных инфраструктурных категорий.
infrastructureLogging: {
level: 'info',
debug: ['Resolver', 'Compilation']
}
Возможные значения элементов массива зависят от внутренних namespace webpack. На практике используются:
Каждый модуль начинает выводить расширенные диагностические сообщения.
Параметр colors контролирует использование ANSI-цветов в
логах:
infrastructureLogging: {
level: 'log',
colors: true
}
При false вывод становится монохромным, что полезно для
CI-сред и логирования в файлы.
Опция appendOnly изменяет поведение вывода логов в
консоль:
infrastructureLogging: {
level: 'info',
appendOnly: true
}
При включении сообщения не перерисовывают строки в терминале, а выводятся последовательно. Это важно для сред, где отсутствует поддержка динамического обновления консоли (например, Docker logs или CI pipelines).
module.exports = {
infrastructureLogging: {
level: 'none'
}
};
Инфраструктурные сообщения полностью подавлены, остаются только критические ошибки системы.
module.exports = {
infrastructureLogging: {
level: 'log',
debug: ['Resolver']
}
};
Позволяет отслеживать процесс поиска модулей, включая алиасы, расширения и fallback-цепочки.
module.exports = {
infrastructureLogging: {
level: 'verbose',
debug: ['Cache', 'Compilation']
}
};
Выводит детальную информацию о чтении и записи кеша, а также о шагах компиляции.
В development-режиме webpack чаще использует инфраструктурные сообщения для информирования о пересборках, изменениях файлов и активности watcher’а. В production большинство этих сообщений подавляется независимо от конфигурации, если уровень установлен слишком низко.
Hot Module Replacement также генерирует инфраструктурные события,
которые можно отследить через verbose или log
уровень.
Высокие уровни логирования (log, verbose)
увеличивают нагрузку на консольный вывод и могут снижать скорость сборки
при больших проектах. Основные причины:
В больших монорепозиториях это может быть заметно при частых пересборках.
При использовании persistent cache инфраструктурные логи становятся особенно важными:
module.exports = {
cache: {
type: 'filesystem'
},
infrastructureLogging: {
level: 'info',
debug: ['Cache']
}
};
В этом режиме можно наблюдать:
Плагины webpack могут использовать инфраструктурный logger через
compilation.getLogger:
class MyPlugin {
apply(compiler) {
compiler.hooks.compilation.tap('MyPlugin', (compilation) => {
const logger = compilation.getLogger('MyPlugin');
logger.info('Initialization step');
logger.debug('Internal state updated');
});
}
}
Вывод этих сообщений зависит от
infrastructureLogging.level, что позволяет централизованно
управлять диагностикой без изменения кода плагина.
module.exports = {
infrastructureLogging: {
level: 'warn',
colors: false,
appendOnly: true
}
};
module.exports = {
infrastructureLogging: {
level: 'verbose',
debug: ['Resolver', 'Cache', 'Watching', 'Compilation'],
colors: true
}
};
module.exports = {
infrastructureLogging: {
level: 'error'
}
};
Такой подход оставляет только критические сообщения, не влияя на производительность и не засоряя логи.