Вопрос или проблема
Журнал ошибок в моем индексном файле записывается в файл error_log.txt
, но тот же журнал ошибок не работает в файле functions.php
. Я использую последнюю версию WordPress и PHP 7.0.
Я также не использую никаких плагинов.
error_log("Привет, произошла ошибка");
У меня была аналогичная проблема: вызов error_log()
из wp-config.php
работает, но вызвать его из functions.php
у меня не получается.
Я не мог решить эту проблему, но нашел обходной путь, который позволил мне хотя бы как-то отлаживать. Я отказался от error_log()
и просто написал собственную функцию, которая записывает в заданный файл:
function mylog($txt) {
file_put_contents('/home/myuser/logs/mylog.txt', $txt.PHP_EOL , FILE_APPEND | LOCK_EX);
}
Если у вас в wp-config.php
установлено следующее:
define( 'WP_DEBUG_LOG', true );
он сохранит журналы в файл wp-content/debug.log
вместо стандартного Apache error.log.
WP_DEBUG_LOG
также может быть установлен на конкретный путь в файловой системе, в этом случае журнал будет записан туда.
Смотрите WP_DEBUG_LOG
документацию WordPress.
Для того чтобы error_log()
что-то делал, вам нужно установить константы WP_DEBUG
и WP_DEBUG_LOG
в true в вашем wp-config.php. (Смотрите: Отладка в WordPress в Codex для получения дополнительной информации.)
Согласно этому ответу на Stackoverflow, вы также должны установить WP_DEBUG_DISPLAY
для того, чтобы error_log()
работал. Обратите внимание, что вы можете установить его на true ИЛИ false, но его явно необходимо определить.
Ответ или решение
Ошибка с логированием в functions.php
: как ее решить
При использовании функции error_log()
в WordPress, важно понимать, что выполнение логирования может зависеть от нескольких факторов конфигурации. Вы описали ситуацию, в которой ошибки, возникающие в вашем functions.php
, не записываются в лог, в отличие от ошибок, зарегистрированных в индексе.
Проверка конфигурации WordPress
-
Убедитесь, что отладка включена: Чтобы функция
error_log()
работала корректно, необходимо, чтобы в вашем файлеwp-config.php
были установлены следующие определения:define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', true ); // или false
Настройка
WP_DEBUG_LOG
указывает WordPress сохранять логи в файлwp-content/debug.log
. Если эта настройка не включена, функции логирования могут не работать должным образом. -
Проверка прав доступа: Убедитесь, что у веб-сервера есть необходимые права для записи в указанное место. Если
debug.log
не может быть создан, это также может быть одной из причин, по которойerror_log()
не работает.
Логирование в functions.php
Если ошибка продолжается, попробуйте следующие подходы:
-
Запись в альтернативный файл: В качестве обходного решения вы можете использовать самописную функцию для записи логов в отдельный файл. Это поможет вам обойти возможные проблемы с настройками
error_log()
. Пример кода:function mylog($txt) { file_put_contents('/home/myuser/logs/mylog.txt', $txt.PHP_EOL , FILE_APPEND | LOCK_EX); }
-
Запись логов в
debug.log
: Вы можете использоватьerror_log()
для записи своих логов прямо вdebug.log
:error_log("Произошла ошибка в functions.php");
Причины, по которым error_log()
может не работать
-
Проблемы с PHP: Убедитесь, что ваша версия PHP поддерживает функции логирования. Версия PHP 7.0 поддерживает
error_log()
, но могут быть другие проблемы, связанные с конфигурацией PHP. -
Конфигурация сервера: Некоторые серверные настройки могут блокировать обработку
error_log()
. Проверьте файл конфигурации PHP (обычноphp.ini
) и убедитесь, что настройкиlog_errors
,error_log
установлены правильно. -
Проблемы с кэшированием: В некоторых случаях кэширование (например, кэширование на уровне сервера или в браузере) может безжалостно игнорировать ошибки, записываемые в логи. Попробуйте очистить кэш, чтобы убедиться, что это не проблема.
Заключение
Решение проблемы с логированием в functions.php
требует внимательности к деталям конфигурации, правам доступа и возможностям вашего сервера. Проверьте все указанные аспекты и используйте альтернативные методы логирования, если error_log()
продолжает не срабатывать. Понимание и диагностика данной проблемы могут значительно облегчить процесс отладки и разработку вашего проекта на WordPress.