Beispiel #1
0
 /**
  * Logs with an arbitrary level.
  *
  * @param string $level
  * @param string|array $message a textual message, encoded JSON or array to encode into JSON
  * @param array $context context regarding the message, if this is included it will
  *                       added to the message as json or included in the json payload
  * @throws \InvalidArgumentException
  * @return null
  */
 public function log($level, $message, array $context = array())
 {
     $this->connectIfNotConnected();
     if (is_array($message)) {
         $message = json_encode($message);
     }
     if (!is_string($message)) {
         throw new \InvalidArgumentException('the message argument needs to be a string or an array');
     } else {
         $isJson = $this->isJSON($message);
         if ($isJson) {
             $json = json_decode($message, true);
             if ("" != $this->_hostname) {
                 $json["hostname"] = $this->_hostname;
             }
             $json["level"] = $level;
             if (count($context) > 0) {
                 $json["context"] = $context;
             }
             $message = json_encode($json);
         } else {
             $message = strtoupper($level) . " - " . $message;
             if ("" != $this->_hostname) {
                 $message = "hostname={$this->_hostname} - " . $message;
                 if (count($context) > 0) {
                     $message .= " - " . json_encode($context);
                 }
             }
         }
         $this->_writer_stack->rewind();
         while ($this->_writer_stack->valid()) {
             /** @var LogEntriesWriter $writer */
             $writer = $this->_writer_stack->current();
             $message = $writer->log($message, $isJson);
             $this->_writer_stack->next();
         }
         $this->writeToSocket($this->substituteNewline($message) . PHP_EOL);
     }
 }
Beispiel #2
0
 /**
  * Skip null elements while validated the current one.
  *
  * @return  bool
  */
 public function valid()
 {
     while (true === parent::valid() && null === $this->current() && null === parent::next()) {
     }
     return parent::valid();
 }