Где я должен указать WordPress, где следует записывать сообщения журнала ошибок?
У меня есть два разных экземпляра одного и того же сервера (один для разработки, один для развертывания), построенные независимо, но в основном одинаковые (та же ОС, та же версия WordPress, тот же контент и т.д.).
Однако я запутался в конфигурации: мне кажется, что они настроены одинаково (за исключением того, что серверу развертывания сказано не записывать ошибки/предупреждения в браузер).
В обеих конфигурациях указано ini_set( 'error_log', '/var/log/wp-debug.log' );
, и этот файл действительно создан обоими; однако на одном сервере все, что написано с использованием error_log(...)
, отправляется в /var/log/wp-debug.log
, тогда как на другом сервере такой вывод вместо этого отправляется в /var/log/apache2/error.log
(хотя ошибки PHP и предупреждения отправляются в /var/log/wp-debug.log
).
Я пробовал играть с определенными значениями WP_DEBUG
, WP_DEBUG_LOG
и WP_DEBUG_DISPLAY
, а также изменение значения display_errors
через ini_set(...)
, но, похоже, ничего не меняет.
Могу ли я указать где-нибудь, что я хочу, чтобы выходные данные вызовов error_log(...)
отправлялись в один или другой из этих журналов? (Я бы хотел получить результат всегда нужно обращаться к Apache error.log
, потому что эту дополнительную информацию я хочу использовать.)
2 answers
На стороне WP единственная обработка, которую он выполняет, - это установка для журнала значения WP_CONTENT_DIR . '/debug.log'
, если включено значение WP_DEBUG_LOG
(очень плохая идея в производственной среде как общедоступное местоположение). Если я правильно помню, самые ранние реализации этой константы позволяли настраивать путь, но это уже не так.
По моему опыту ini_set( 'log_errors', 1 ); ini_set( 'error_log', '/path' )
в wp-config.php
должно быть достаточно (если вы не включите WP_DEBUG_LOG
, который переопределит его).
Ваш второй случай звучит странно. Я бы ожидал, что ошибки будут идти в одном направлении или другой, но не в два отдельных файла журнала. Возможно, что-то изменяет конфигурацию во время выполнения. Это невозможно сказать, не имея возможности устранить неполадки.
Как описано в другом месте на этой странице, в моем случае решением было просто сбросить значение параметра PHP error_log
. Я сделал это, добавив в конец своего /var/www/html/wp-config.php
:
ini_restore('error_log');
Один важный момент: я закончил тем, что поставил это прямо в конце, потому что, похоже, это не вступило в силу, когда было включено сразу после различных строк define('WP_DEBUG...', ...);
.
Спасибо Рарсту и байниколасу за их советы, которые помогли мне прийти к этому решению.