php 当 WP_DEBUG_LOG 设置为 true 时,debug.log 中没有显示调试输出,为什么?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13788660/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 06:03:45  来源:igfitidea点击:

With WP_DEBUG_LOG set to true, no debug output shows in debug.log, why?

phpdebuggingwordpress

提问by Septagram

I'm trying to enable basic debug output with WordPress for a plugin I'm developing. I managed to get some so far, but failed to redirect it to wp-content/debug.log. I've been roughly following the guide by Douglas Neiner. Here's what I did:

我正在尝试使用 WordPress 为我正在开发的插件启用基本调试输出。到目前为止,我设法获得了一些,但未能将其重定向到wp-content/debug.log. 我一直在大致遵循Douglas Neiner 的指南。这是我所做的:

I added this snippet of code to the end of wp-config.php:

我在末尾添加了这段代码wp-config.php

@ini_set ('display_errors', 0);
define ('WP_DEBUG', true);
define ('WP_DEBUG_DISPLAY', false);
define ('WP_DEBUG_LOG', true);

I manually created debug.logfile and made sure it's accessible by www-datauser (I'm running WordPress locally, on Ubuntu 12.04):

我手动创建了debug.log文件并确保www-data用户可以访问它(我在 Ubuntu 12.04 上本地运行 WordPress):

septi@norbert:~$ sudo su www-data -c 'ls -l /usr/share/wordpress/wp-content/debug.log'
-rw-rw-r-- 1 root www-data 0 Dec  9 22:12 /usr/share/wordpress/wp-content/debug.log
septi@norbert:~$ sudo su www-data -c 'ls -l /srv/www/localhost/wp-content/debug.log'
-rw-rw-r-- 1 root www-data 0 Dec  9 22:12 /srv/www/localhost/wp-content/debug.log
septi@norbert:~$ sudo su www-data -c 'echo i can write >> /usr/share/wordpress/wp-content/debug.log'
septi@norbert:~$

Added a few supposed debug output statement inside the plugin activation hook, as well as the intentional error:

在插件激活钩子中添加了一些假设的调试输出语句,以及故意错误:

include ('i fail wp');

register_activation_hook (__FILE__, 'hello_world_activate');

function hello_world_activate()
{
    error_log ('I love debug output when it works!');
}

What I expect is an error message about the missing include file in debug.logalong with the "I love debug output when it works!" message, and nothing on the page. What I get is the missing include file on the page message and nothing in debug.log. The debug output message is not fully lost, however. I found it in the /var/log/apache2/error.log:

我期望的是关于缺少包含文件的错误消息debug.log以及“我喜欢调试输出时它的工作!” 消息,页面上没有任何内容。我得到的是页面消息中缺少的包含文件,而debug.log. 但是,调试输出消息并未完全丢失。我在/var/log/apache2/error.log

[Sun Dec 09 22:58:18 2012] [error] [client 127.0.0.1] PHP Warning:  include(i fail wp): failed to open stream: No such file or directory in /usr/share/wordpress/wp-content/plugins/helloworld2085/helloworld2085.php on line 28, referer: http://localhost/wp/wp-admin/plugins.php?deactivate=true&plugin_status=all&paged=1&s=
[Sun Dec 09 22:58:18 2012] [error] [client 127.0.0.1] PHP Warning:  include(): Failed opening 'i fail wp' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /usr/share/wordpress/wp-content/plugins/helloworld2085/helloworld2085.php on line 28, referer: http://localhost/wp/wp-admin/plugins.php?deactivate=true&plugin_status=all&paged=1&s=
[Sun Dec 09 22:58:18 2012] [error] [client 127.0.0.1] I love debug output when it works!, referer: http://localhost/wp/wp-admin/plugins.php?deactivate=true&plugin_status=all&paged=1&s=
[Sun Dec 09 22:58:18 2012] [error] [client 127.0.0.1] PHP Warning:  include(i fail wp): failed to open stream: No such file or directory in /usr/share/wordpress/wp-content/plugins/helloworld2085/helloworld2085.php on line 28, referer: http://localhost/wp/wp-admin/plugins.php?deactivate=true&plugin_status=all&paged=1&s=
[Sun Dec 09 22:58:18 2012] [error] [client 127.0.0.1] PHP Warning:  include(): Failed opening 'i fail wp' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /usr/share/wordpress/wp-content/plugins/helloworld2085/helloworld2085.php on line 28, referer: http://localhost/wp/wp-admin/plugins.php?deactivate=true&plugin_status=all&paged=1&s=

I suspect that the error_log()function is not the right one to use to output to debug.log, but I failed to find the right way. Oh, of course I could just hardcode the file path and append to it, but, you know...

我怀疑该error_log()函数不是用于输出到的正确函数debug.log,但我未能找到正确的方法。哦,当然我可以硬编码文件路径并附加到它,但是,你知道......

采纳答案by webaware

the error_log() function writes to the web server's error log (e.g. /var/log/httpd/error_log); what you want is trigger_error().

error_log() 函数写入 Web 服务器的错误日志(例如 /var/log/httpd/error_log);你想要的是trigger_error()

回答by Maithilish

I encountered the same problem with WordPress running in Apache 2.4 on Fedora 19. Output of error_log() was landing in /var/log/httpd/error_log instead of wp-content/debug.log. Httpd process had write permission (+775) to /var/www/html/wp-content directory, but it was unable to create the wp-content/debug.log file.

我在 Fedora 19 上的 Apache 2.4 中运行 WordPress 时遇到了同样的问题。 error_log() 的输出登陆 /var/log/httpd/error_log 而不是 wp-content/debug.log。Httpd 进程对 /var/www/html/wp-content 目录具有写权限 (+775),但无法创建 wp-content/debug.log 文件。

My wp-config.php debug setting was:

我的 wp-config.php 调试设置是:

@ini_set(‘display_errors',0);
define('WP_DEBUG',         true);
define('WP_DEBUG_DISPLAY', false);
define('WP_DEBUG_LOG', true);

As it turned out, the real cause was SELinux. I made SELinux policy change and allowed httpd to write to wp-content with following commands. (Refer SELinux Troubleshooter to get the actual command for your installation)

事实证明,真正的原因是 SELinux。我更改了 SELinux 策略并允许 httpd 使用以下命令写入 wp-content。(请参阅 SELinux Troubleshooter 以获取安装的实际命令)

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/wp-content'
restorecon -v '/var/www/html/wp-content'

After this debug messages start appearing in wp-content/debug.log.

在此调试消息开始出现在 wp-content/debug.log 之后。