ข้ามการนำทาง

Open

Reported for: WPML Multilingual CMS 4.7.0

Topic Tags: Bug

Overview of the issue

WPML 4.7 has a compatibility issue with plugins that use PSR/Log 3.0, such as Rollbar. When WPML and Rollbar are both active, running WP-CLI commands (e.g., wp --info) triggers a fatal error due to method signature mismatches in the DebugFileLogger class.

PHP Fatal error:  Declaration of WPML\\PHP\\Logger\\DebugFileLogger::log($level, $message, array $context = []) must be compatible with Psr\\Log\\AbstractLogger::log($level, Stringable|string $message, array $context = []): void in ...\\wp-content\\plugins\\sitepress-multilingual-cms\\vendor\\wpml\\wpml\\lib\\Php\\Logger\\DebugFileLogger.php on line 8

Workaround

Please, make sure of having a full site backup of your site before proceeding.

  • Open …/wp-content/plugins/sitepress-multilingual-cms/vendor/wpml/wpml/lib/Php/Logger/DebugFileLogger.php file.
  • Replace:
    namespace WPML\PHP\Logger;
    
    class DebugFileLogger extends \Psr\Log\AbstractLogger {
    
    
      public function log( $level, $message, array $context = array() ) {
        if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) {
          return;
        }
    
        $log = date( 'Y-m-d H:i:s' ) . ' [' . $level . '] ' . $message . PHP_EOL;
        \error_log( $log );
      }
    
    
    }
    
  • With:
    namespace WPML\PHP\Logger;
    
    use Psr\Log\AbstractLogger;
    use Stringable;
    
    class DebugFileLogger extends AbstractLogger {
    
      public function log($level, $message, array $context = []): void {
        if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) {
          return;
        }
    
        $log = date( 'Y-m-d H:i:s' ) . ' [' . $level . '] ' . (string) $message . PHP_EOL;
        \error_log( $log );
      }
    
    }
    

5 การตอบกลับ ถึง “WPML 4.7 Conflict with Plugins Using PSR/Log 3.0 Causes Fatal Error in WP-CLI”

  1. This worked for me:

    namespace WPML\PHP\Logger;

    class DebugFileLogger extends \Psr\Log\AbstractLogger {

    public function log( $level, $message, array $context = array() ) : void {
    if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) {
    return;
    }

    $log = date( 'Y-m-d H:i:s' ) . ' [' . $level . '] ' . $message . PHP_EOL;
    \error_log( $log );
    }

    }

ทิ้งคำตอบไว้

โปรดอยู่ในหัวข้อและเคารพผู้อื่น หากคุณต้องการความช่วยเหลือเกี่ยวกับปัญหาที่ไม่เกี่ยวข้องกับโพสต์นี้ โปรดใช้ฟอรัมสนับสนุนของเราเพื่อเริ่มการสนทนาหรือส่งตั๋ว.

คุณสามารถใช้แท็กเหล่านี้:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>