在STDOUT而不是debug.log中写入WordPress错误?

k10s72fa  于 2022-12-18  发布在  WordPress
关注(0)|答案(2)|浏览(118)

我的WordPress应用程序运行在ECS示例上,我还设置了CloudWatch以获取基本的日志信息。
当一切正常运行时,这一切都没问题,但当我出现错误时,我在日志中看到的内容如下所示
浏览次数:2019年1月21日- [2019年1月21日:08:03:00 + 0000]“HTTP/1.1”浏览次数:400 5次
这发生在我创建一个新用户的时候,但是有一个错误。是哪一个,我不知道。
因此,我希望输出STDOUT中发生的任何错误,以便在常规日志(the twelve factor app - logging)中看到它们。
我也在考虑实施独白,但那似乎需要太多时间,我需要一些快速的东西。
通过深入研究WP核心代码,我发现在wp-includes/load.php

if ( WP_DEBUG_LOG ) {
  ini_set( 'log_errors', 1 );
  ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' );
}

因此,默认情况下,error_log将错误和通知写入debug.log
我能不能用类似于

ini_set( 'error_log', fwrite( STDOUT, WP_CONTENT_DIR . '/debug.log' ) );

在我的插件中还是在我的wp-config.php中?或者我还需要做些什么?一般来说,我希望避免一起创建debug.log文件,而只是将错误输出到STDOUT

编辑

好的,那么把上面的代码放在wp-config.php中是行不通的,因为我得到
使用未定义的常量STDOUT
使用未定义的常量WP_CONTENT_DIR
以及
:fwrite()要求参数1为资源,字符串在
警告

1cosmwyk

1cosmwyk1#

这显然奏效了:

function overwrite_error_log() {
  ini_set( 'error_log', '/dev/stdout' ); // phpcs:ignore
}

add_action( 'init', 'overwrite_error_log', 10 );

感谢Sarah Pantry在Facebook上提供的片段:)

smdnsysy

smdnsysy2#

实际上代码已经更改,所以define('WP_DEBUG', true); define('WP_DEBUG_LOG', '/dev/stdout');到wp-config.php应该足够了:

if ( WP_DEBUG ) {
    error_reporting( E_ALL );

    if ( WP_DEBUG_DISPLAY ) {
        ini_set( 'display_errors', 1 );
    } elseif ( null !== WP_DEBUG_DISPLAY ) {
        ini_set( 'display_errors', 0 );
    }

    if ( in_array( strtolower( (string) WP_DEBUG_LOG ), array( 'true', '1' ), true ) ) {
        $log_path = WP_CONTENT_DIR . '/debug.log';
    } elseif ( is_string( WP_DEBUG_LOG ) ) {
        $log_path = WP_DEBUG_LOG;
    } else {
        $log_path = false;
    }

    if ( $log_path ) {
        ini_set( 'log_errors', 1 );
        ini_set( 'error_log', $log_path );
    }
} else {
    error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
}

相关问题