ナビゲーションをスキップする

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. It seems to me this error is not only limited to WP-CLI. If there already is a fix i would appreciate a patch release since this currently breaks some of our pages.

    • Hello there,
      If you can reproduce this error in a different way, we would appreciate if you can share the steps to reproduce it. In that way we will be able to check if there are other cases that need to be covered. Furthermore, if the workaround here provided doesn’t help, you can start a chat in our support forum.

  2. 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 );
    }

    }

    • Hi Luc,

      Thanks for sharing your workaround! I’ll pass it along to our developers for their feedback.

    • Hi Again Luc,

      Thanks for your comment! We’ve updated the workaround to ensure the syntax is compatible with PHP 7.1 and later.

返答する

トピックからそれないようにし、他のユーザーを尊重してください。この投稿に関係のない問題についてサポートが必要な場合は、サポート フォーラムを使用してチャットを開始するか、チケットを送信してください。

これらのタグを使用できます:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>