WordPress错误:无日志,无消息,无信息

时间:2019-10-18 12:12:31

标签: php wordpress logging

我已经升级了一个不太旧的Wordpress网站版本,还将服务器从php 5.6升级到了php 7.2(所有这些都在本地和受控环境中进行。)

该网站有一些插件和一个自定义主题。禁用并重新启用插件以控制错误的插件。

在所有允许升级的插件升级之后,我一直在跟踪错误并解决错误,直到现在为止。

输入主题选项和其他插件配置时,出现错误消息:

  

该站点遇到技术困难。请查看您的电子邮件以获取说明。

我在apache / php错误日志和Wordpress调试日志中找不到任何错误跟踪。所有PHP配置都设置为显示所有错误,并且我的wp-config.php文件具有以下行来强制调试和记录:

define('WP_DEBUG', true );
define('WP_DEBUG_LOG', true );
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

在哪里可以获取有关这些错误的更多具体信息?我知道是哪个插件/主题引起的,但是我需要调试并找到发生它们的地方。

谢谢。

2 个答案:

答案 0 :(得分:0)

请按照以下步骤操作:

  1. 将以下这些代码粘贴到wp-config.php中

    define('WP_DEBUG',true);

    define('WP_DEBUG_LOG',true);

    define('WP_DEBUG_DISPLAY',true);

    @ini_set('display_errors',1);

    define('SCRIPT_DEBUG',true);

  2. 在wp-content目录中创建一个名为debug.log的文件。

3。像以前一样运行WordPress网站,并在任何文本编辑器中打开debug.log文件。 您会在这里找到所有的东西(错误)。

答案 1 :(得分:0)

因此,我发现脚本在其中Wordpress处理致命错误,并在通用消息下掩盖了这些错误:

  

该站点遇到技术困难。请查看您的电子邮件以获取说明。

脚本/wp-includes/class-wp-fatal-error-handler.phptry..catch块下处理这些错误,这使得错误消息无法显示。

因此,仅用于调试的临时解决方案是修改方法handle()以禁用try..catch并记录错误消息,如下所示:

免责声明:此修改一旦网站投入生产,就必须撤消,仅用于调试目的。

public function handle() {
        if ( defined( 'WP_SANDBOX_SCRAPING' ) && WP_SANDBOX_SCRAPING ) {
            return;
        }
        // comment try..catch
        // try {
            // Bail if no error found.
            $error = $this->detect_error();
            if ( ! $error ) {
                return;
            }

//log error message
error_log($error["message"]);
return;

            if ( ! isset( $GLOBALS['wp_locale'] ) && function_exists( 'load_default_textdomain' ) ) {
                load_default_textdomain();
            }

            if ( ! is_multisite() && wp_recovery_mode()->is_initialized() ) {
                wp_recovery_mode()->handle_error( $error );
            }

            // Display the PHP error template if headers not sent.
            if ( is_admin() || ! headers_sent() ) {
                $this->display_error_template( $error );
            }
        // } catch ( Exception $e ) {
            // Catch exceptions and remain silent.
        // }
    }

如果error_log文件中存在以下行,则函数wp-content/debug.log会将错误记录到wp-config.php

define( 'WP_DEBUG_LOG', true );

否则返回Apache / php错误日志。

当然,还有其他方法和其他配置可以调试这些错误,但这很简单。