You are here

class GelfLog in GELF 8

Hierarchy

Expanded class hierarchy of GelfLog

1 string reference to 'GelfLog'
gelf.services.yml in ./gelf.services.yml
gelf.services.yml
1 service uses GelfLog
logger.gelf in ./gelf.services.yml
Drupal\gelf\Logger\GelfLog

File

src/Logger/GelfLog.php, line 13

Namespace

Drupal\gelf\Logger
View source
class GelfLog implements LoggerInterface {
  use RfcLoggerTrait;

  /**
   * {@inheritdoc}
   */
  public function log($level, $message, array $context = array()) {
    if (!gelf_require()) {
      if (function_exists('user_access') && user_access('administer gelf')) {
        drupal_set_message(t('GELF module requires the GELF PHP library to be installed.  View the README for installation instructions.'), 'error');
      }
      return;
    }
    $settings = \Drupal::config('gelf.settings');
    $host = $settings
      ->get('gelf_host');
    $port = $settings
      ->get('gelf_port');

    // Remove any backtraces since they may contain an unserializable variable.
    unset($context['backtrace']);

    // Convert PSR3-style messages to SafeMarkup::format() style, so they can be
    // translated too in runtime.
    $parser = new LogMessageParser();
    $message_placeholders = $parser
      ->parseMessagePlaceholders($message, $context);
    foreach ($message_placeholders as $key => $value) {
      $message = str_replace($key, $value, $message);
    }
    $transport = new UdpTransport($host, $port, UdpTransport::CHUNK_SIZE_LAN);

    // Now we can create custom messages and publish them.
    $gelf = new Message();
    $short_msg_length = 100;
    if (strlen($message) > $short_msg_length) {
      $short_message = preg_replace('/\\s+?(\\S+)?$/u', '', substr($message, 0, $short_msg_length));
    }
    else {
      $short_message = $message;
    }
    $username = $context['user']
      ->getDisplayName();
    $gelf
      ->setShortMessage($short_message);
    $gelf
      ->setFullMessage($message);
    $gelf
      ->setHost(Unicode::substr($context['ip'], 0, 128));
    $gelf
      ->setFacility(Unicode::substr($context['channel'], 0, 64));
    $gelf
      ->setLevel($level);
    $gelf
      ->setTimestamp($context['timestamp']);
    $gelf
      ->setAdditional("Referer", $context['referer']);
    $gelf
      ->setAdditional("Link", $context['link']);
    $gelf
      ->setAdditional("Username", $username);
    $gelf
      ->setAdditional("Uid", $context['uid']);
    $gelf
      ->setAdditional("Request_uri", $context['request_uri']);
    $gelf
      ->setAdditional("Request_method", $_SERVER['REQUEST_METHOD']);
    $gelf
      ->setAdditional("Server_host", $_SERVER['HTTP_HOST']);
    $gelf
      ->setAdditional("Client_host", $context['ip']);
    try {
      $publisher = new Publisher();
      $publisher
        ->addTransport($transport);
      $publisher
        ->publish($gelf);
    } catch (UnexpectedValueException $e) {
      if (function_exists('user_access') && user_access('administer gelf')) {
        drupal_set_message(t('Failed to publish gelf message: %message', array(
          '%message' => $e
            ->getMessage(),
        )), 'error');
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
GelfLog::log public function Overrides RfcLoggerTrait::log
RfcLoggerTrait::alert public function
RfcLoggerTrait::critical public function
RfcLoggerTrait::debug public function
RfcLoggerTrait::emergency public function
RfcLoggerTrait::error public function
RfcLoggerTrait::info public function
RfcLoggerTrait::notice public function
RfcLoggerTrait::warning public function