You are here

class LogMessageParser in Drupal 8

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Logger/LogMessageParser.php \Drupal\Core\Logger\LogMessageParser

Parses log messages and their placeholders.

Hierarchy

Expanded class hierarchy of LogMessageParser

1 file declares its use of LogMessageParser
LogMessageParserTest.php in core/tests/Drupal/Tests/Core/Logger/LogMessageParserTest.php
1 string reference to 'LogMessageParser'
core.services.yml in core/core.services.yml
core/core.services.yml
1 service uses LogMessageParser
logger.log_message_parser in core/core.services.yml
Drupal\Core\Logger\LogMessageParser

File

core/lib/Drupal/Core/Logger/LogMessageParser.php, line 8

Namespace

Drupal\Core\Logger
View source
class LogMessageParser implements LogMessageParserInterface {

  /**
   * {@inheritdoc}
   */
  public function parseMessagePlaceholders(&$message, array &$context) {
    $variables = [];
    $has_psr3 = FALSE;
    if (($start = strpos($message, '{')) !== FALSE && strpos($message, '}') > $start) {
      $has_psr3 = TRUE;

      // Transform PSR3 style messages containing placeholders to
      // \Drupal\Component\Render\FormattableMarkup style.
      $message = preg_replace('/\\{(.*)\\}/U', '@$1', $message);
    }
    foreach ($context as $key => $variable) {

      // PSR3 style placeholders.
      if ($has_psr3) {

        // Keys are not prefixed with anything according to PSR3 specs.
        // If the message is "User {username} created" the variable key will be
        // just "username".
        if (strpos($message, '@' . $key) !== FALSE) {
          $key = '@' . $key;
        }
      }
      if (!empty($key) && ($key[0] === '@' || $key[0] === '%' || $key[0] === '!')) {

        // The key is now in \Drupal\Component\Render\FormattableMarkup style.
        $variables[$key] = $variable;
      }
    }
    return $variables;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
LogMessageParser::parseMessagePlaceholders public function Parses and transforms message and its placeholders to a common format. Overrides LogMessageParserInterface::parseMessagePlaceholders