Commit 1d2fd0c2 authored by Chris Burgess's avatar Chris Burgess Committed by Jacob Friis Mathiasen
Browse files

Issue #3309387 by xurizaemon: Formattable strings are not supported

parent d171aca6
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
namespace Drupal\jsonlog\Logger;

use Drupal\Component\Serialization\Json;
use Drupal\Component\Render\FormattableMarkup;
use Drupal\Component\Utility\Unicode;
use Drupal\Core\Logger\RfcLogLevel;
use Drupal\Core\StringTranslation\TranslatableMarkup;
@@ -75,7 +76,7 @@ class JsonLogData {
  }

  /**
   * @param string|TranslatableMarkup $entry
   * @param string|FormattableMarkup|TranslatableMarkup $entry
   * @param int|false $truncate
   * @param array $variables
   */
@@ -91,10 +92,15 @@ class JsonLogData {
    }

    if (($entry)) {
      if ($entry instanceof TranslatableMarkup) {
      if ($entry instanceof FormattableMarkup) {
        /** @var FormattableMarkup $entry */
        $this->message = $entry->jsonSerialize();
      }
      elseif ($entry instanceof TranslatableMarkup) {
        /** @var TranslatableMarkup $entry */
        $this->message = $entry->getUntranslatedString();
      } else {
      }
      else {
        /** @var string message */
        $this->message = empty($variables) ? $entry : strtr($entry, $variables);
      }
+11 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace Drupal\Tests\jsonlog\Unit;

use Drupal\Component\Render\FormattableMarkup;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\jsonlog\Logger\JsonLogData;
use Drupal\Tests\UnitTestCase;
@@ -84,6 +85,16 @@ class JsonLogDataTest extends UnitTestCase {
    $this->assertEmpty($this->data->getTrunc(), 'Message not truncated');
  }

  public function testCanSetFormattableMessage() {
    $this->data = new JsonLogData('test_site_id', 'test_canonical');
    $this->assertNull($this->data->getMessage(), 'Message empty by default');

    $msg = new FormattableMarkup('formattable logging item', []);
    $this->data->setMessage($msg);
    $this->assertEquals('formattable logging item', $this->data->getMessage(), 'By default message gets logged.');
    $this->assertEmpty($this->data->getTrunc(), 'Message not truncated');
  }

  public function testCanSetTranslatableMessage() {
    $this->data = new JsonLogData('test_site_id', 'test_canonical');
    $this->assertNull($this->data->getMessage(), 'Message empty by default');