Debug Log Router

Описание

Большинство инструментов для отладочного лога показывают один debug.log, который пишет WordPress. Debug Log Router вместо этого раскладывает записи по типу запроса: ошибка, которую увидел посетитель на сайте, предупреждение из админки и сбой фоновой задачи cron попадают в разные файлы. Вы сразу видите, чего стоила ошибка, а ошибки cron, которые не показываются ни на одной странице, больше не тонут среди остальных.

Семь контекстов, семь файлов

  • front.log — публичная часть сайта
  • admin.log — админка
  • ajax.log — запросы admin-ajax
  • rest.log — REST API, включая пользовательский префикс REST
  • cron.log — WP-Cron
  • cli.log — WP-CLI
  • xmlrpc.log — XML-RPC

Файлы создаются по мере необходимости: на сайте без WP-CLI файл cli.log никогда не появится. Записи пишутся в обычном формате лога PHP, поэтому файлы по-прежнему открываются в любом текстовом редакторе и по FTP.

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

  • «Инструменты Логи отладки», вкладка «Логи»: свежие записи сверху, по 50 за раз, до 500 записей в браузере.
  • Там же находится журнал собственных действий плагина: что он менял в wp-config.php и в каталоге логов и что сделать не смог.
  • Любой лог и журнал можно скачать файлом на вкладке «Логи». Весь каталог логов скачивается zip-архивом на вкладке «Настройки», если на сервере есть расширение PHP zip; без него файлы скачиваются по одному.
  • Старый wp-content/debug.log остаётся нетронутым и открывается в том же просмотрщике.
  • Логирование включается и выключается одним переключателем на вкладке «Настройки».
  • По умолчанию ошибки скрыты от посетителей. Вы можете показывать их или оставить это на усмотрение сервера.

Как плагин работает с wp-config.php

Отладочные константы WordPress читает до загрузки любых плагинов, поэтому без wp-config.php не обойтись. Плагин меняет его один раз:

  • Активация ничего не меняет. Правка происходит только по кнопке на вкладке «Состояние», и до нажатия показано, что именно будет добавлено.
  • Изменённый файл проверяется до того, как заменит оригинал: если в результате есть синтаксическая ошибка или что-то не так, как ожидалось, wp-config.php остаётся в точности прежним. Права, владелец и группа файла сохраняются.
  • В конфиг вставляется короткий блок, который подключает загрузчик плагина и называет папку плагина в каталоге загрузок. Все настройки живут там и в базе данных. Переключение логирования и остальные настройки wp-config.php больше не трогают.
  • Существующие строки define() для WP_DEBUG, WP_DEBUG_LOG и WP_DEBUG_DISPLAY не удаляются, а комментируются с пометкой DLOGR-DISABLED.
  • Если файл недоступен для записи, плагин покажет готовый фрагмент, номер строки для вставки и кнопку копирования.
  • Блок удаляется кнопкой «Убрать настройку из wp-config.php» или при удалении плагина, а закомментированные строки восстанавливаются.
  • Если файлы плагина удалили по FTP, блок ничего не делает, и сайт работает как обычно.
  • Вкладка «Состояние» предупреждает, когда те же константы определены выше блока, и если блок на месте, но плагин не загружается — например, после переезда сайта, — и предлагает кнопку, которая перезапишет блок с текущими путями.

Каталог логов

Логи хранятся в папке wp-content/uploads/debug-log-router/dlogr-logs-xxxxxxxx (или там, где на вашем сайте каталог загрузок), где последние восемь символов случайные. Главная защита — это имя: адрес каталога нельзя угадать. Второй слой: .htaccess, который закрывает прямой доступ на Apache и LiteSpeed. Имя каталога можно сменить одной кнопкой, если оно где-то засветилось. PHP-файлы в каталог загрузок плагин не пишет.

Конфиденциальность

Плагин не отправляет никаких данных за пределы вашего сервера и не обращается к внешним сервисам. Учтите, что сами логи PHP могут содержать пути на диске, фрагменты SQL-запросов и данные пользователей сайта. Поэтому доступ к ним есть только у администраторов, а каталог логов защищён, как описано выше. Журнал собственных действий плагина записывает, кто из пользователей выполнил каждое действие.

Мультисайт

Сети WordPress (мультисайт) не поддерживаются: плагин не тестировался на них и не заявляет о работоспособности в этой среде.

Языки

Тексты плагина выводятся на языке вашего профиля WordPress; переводы поступают в виде языковых пакетов с translate.wordpress.org. На вкладке «Настройки» страницу плагина можно отдельно переключить на английский, а остальной WordPress сохраняет ваш язык: удобно, когда вы ищете сообщение об ошибке или отправляете скриншот в поддержку.

Поддержка

Вкладка «Поддержка» поясняет, что делает плагин и куда сообщать об ошибках, а также показывает версию и лицензии.

Благодарности

Иконки — Lucide (https://lucide.dev), лицензия ISC. Часть иконок взята из проекта Feather, лицензия MIT. Текст лицензий — в assets/icons/LICENSE.

Скриншоты

Установка

  1. Установите и активируйте плагин. Активация не меняет ни wp-config.php, ни файлы на диске.
  2. Откройте «Инструменты Логи отладки», вкладка «Состояние».
  3. Нажмите «Настроить и включить логирование». Плагин добавит свой блок в wp-config.php и создаст каталог логов.
  4. Если wp-config.php недоступен для записи, вставьте показанный фрагмент вручную в указанное место.

Часто задаваемые вопросы

Какие записи никогда не попадают в логи плагина?

Всё, что произошло в wp-config.php выше блока плагина: объявления констант базы данных и солей, вставки хостинга, а также код, подключённый через auto_prepend_file. Ничто внутри wp-config.php не может поймать то, что случилось до его собственного запуска. Зато ошибки ниже блока, в том числе в оставшейся части wp-config.php, попадают в логи. Штатный debug.log их не видит вовсе.

Что будет со старым debug.log?

Пока плагин ведёт логирование, этот файл не используется: записи идут в файлы плагина. Старый файл остаётся на месте и открывается на вкладке «Логи». Учтите, что собственной защиты у него нет и он может быть доступен прямо из браузера.

Я отключил логирование. Изменился ли wp-config.php?

Нет. Переключатель изменяет только собственный файл плагина.

Что происходит при деактивации?

Логирование прекращается. Блок остаётся в wp-config.php, но ничего не делает, пока плагин снова не будет активирован.

Что удаляется вместе с плагином?

При удалении плагин убирает свой блок из wp-config.php. Всё остальное удаляется, только если вы заранее отметили это на вкладке «Настройки». Для этого есть отдельные флажки для текущего каталога логов, для каждого каталога, оставшегося от предыдущих установок, и для данных плагина (журнал и настройки). По умолчанию ничего не отмечено: вы можете удалить плагин и сохранить логи, и следующая установка их подхватит. Если не остаётся ни одного каталога логов, папка плагина в каталоге загрузок также удаляется.

Если не удалось убрать блок, например, wp-config.php закрыт для записи, то не удаляется ничего. В этом случае удалите вручную строки от BEGIN Debug Log Router до END Debug Log Router и уберите префиксы DLOGR-DISABLED. Надёжнее снять блок кнопкой на вкладке «Состояние» до удаления плагина: там видно, сработало ли это.

Почему записи попадают в лог сервера, а не в файлы плагина?

Так бывает, когда хостинг закрепил путь к логу PHP в настройках сервера (например, с помощью php_admin_value[error_log]). Ни плагин, ни сам WordPress не могут это изменить. Плагин об этом предупреждает на вкладке «Состояние» и, если лог сервера доступен для чтения, показывает его на вкладке «Логи». Учтите, что этот лог может быть общим для нескольких сайтов на сервере.

Хранит ли плагин копию wp-config.php?

Нет. Каждое изменение проверяется до того, как файл будет заменён, и изменение, не прошедшее проверку, оставляет wp-config.php нетронутым. Свои изменения плагин отменяет снятием своего блока, а не восстановлением старой копии, поэтому строки, которые позже добавили другие плагины или хостинг, остаются на месте. Если копия всё же нужна, сделайте её сами до нажатия кнопки.

Мой сервер работает на nginx. Защищены ли логи?

nginx не читает .htaccess, поэтому тут единственной защитой является случайное имя каталога. Чтобы полностью закрыть каталог, добавьте правило в конфигурацию nginx.

«Здоровье сайта» предупреждает, что лог может быть публичным

WordPress показывает это предупреждение для любого лога внутри каталога сайта, обращая внимание только на путь. Плагин добавляет пояснение к тексту этой проверки: каталог был создан плагином, имя у него случайное, используется .htaccess. Статус проверки плагин не меняет.

Отзывы

Нет отзывов об этом плагине.

Участники и разработчики

«Debug Log Router» — проект с открытым исходным кодом. В развитие плагина внесли свой вклад следующие участники:

Участники

«Debug Log Router» переведён на 1 язык. Благодарим переводчиков за их работу.

Перевести «Debug Log Router» на ваш язык.

Заинтересованы в разработке?

Посмотрите код, проверьте SVN репозиторий, или подпишитесь на журнал разработки по RSS.

Журнал изменений

1.0.0

  • Первый выпуск.