/**
  * {@inheritdoc}
  */
 public function format(array $record)
 {
     $record = parent::format($record);
     if (!isset($record['datetime'], $record['message'], $record['level'])) {
         throw new \InvalidArgumentException('The record should at least contain datetime, message and level keys, ' . var_export($record, true) . ' given');
     }
     $message = new Message();
     $message->setTimestamp($record['datetime'])->setShortMessage((string) $record['message'])->setHost($this->systemName)->setLevel($this->logLevels[$record['level']]);
     if (isset($record['channel'])) {
         $message->setFacility($record['channel']);
     }
     if (isset($record['extra']['line'])) {
         $message->setLine($record['extra']['line']);
         unset($record['extra']['line']);
     }
     if (isset($record['extra']['file'])) {
         $message->setFile($record['extra']['file']);
         unset($record['extra']['file']);
     }
     foreach ($record['extra'] as $key => $val) {
         $message->setAdditional($this->extraPrefix . $key, is_scalar($val) ? $val : $this->toJson($val));
     }
     foreach ($record['context'] as $key => $val) {
         $message->setAdditional($this->contextPrefix . $key, is_scalar($val) ? $val : $this->toJson($val));
     }
     if (null === $message->getFile() && isset($record['context']['exception']['file'])) {
         if (preg_match("/^(.+):([0-9]+)\$/", $record['context']['exception']['file'], $matches)) {
             $message->setFile($matches[1]);
             $message->setLine($matches[2]);
         }
     }
     return $message;
 }
Ejemplo n.º 2
0
 /**
  * {@inheritdoc}
  */
 public function format(array $record)
 {
     $record = parent::format($record);
     if (!isset($record['datetime'], $record['message'], $record['level'])) {
         throw new \InvalidArgumentException('The record should at least contain datetime, message and level keys, ' . var_export($record, true) . ' given');
     }
     $message = new Message();
     $message->setTimestamp($record['datetime'])->setShortMessage((string) $record['message'])->setHost($this->systemName)->setLevel($this->logLevels[$record['level']]);
     // start count with message length + system name length + 200 for padding / metadata
     $len = 200 + strlen((string) $record['message']) + strlen($this->systemName);
     if ($len > self::MAX_LENGTH) {
         $message->setShortMessage(substr($record['message'], 0, self::MAX_LENGTH - 200));
         return $message;
     }
     if (isset($record['channel'])) {
         $message->setFacility($record['channel']);
         $len += strlen($record['channel']);
     }
     if (isset($record['extra']['line'])) {
         $message->setLine($record['extra']['line']);
         $len += 10;
         unset($record['extra']['line']);
     }
     if (isset($record['extra']['file'])) {
         $message->setFile($record['extra']['file']);
         $len += strlen($record['extra']['file']);
         unset($record['extra']['file']);
     }
     foreach ($record['extra'] as $key => $val) {
         $val = is_scalar($val) ? $val : $this->toJson($val);
         $len += strlen($this->extraPrefix . $key . $val);
         if ($len > self::MAX_LENGTH) {
             $message->setAdditional($this->extraPrefix . $key, substr($val, 0, self::MAX_LENGTH - $len));
             break;
         }
         $message->setAdditional($this->extraPrefix . $key, $val);
     }
     foreach ($record['context'] as $key => $val) {
         $val = is_scalar($val) ? $val : $this->toJson($val);
         $len += strlen($this->contextPrefix . $key . $val);
         if ($len > self::MAX_LENGTH) {
             $message->setAdditional($this->contextPrefix . $key, substr($val, 0, self::MAX_LENGTH - $len));
             break;
         }
         $message->setAdditional($this->contextPrefix . $key, $val);
     }
     if (null === $message->getFile() && isset($record['context']['exception']['file'])) {
         if (preg_match("/^(.+):([0-9]+)\$/", $record['context']['exception']['file'], $matches)) {
             $message->setFile($matches[1]);
             $message->setLine($matches[2]);
         }
     }
     return $message;
 }
Ejemplo n.º 3
0
Archivo: Gelf.php Proyecto: arbi/MyCode
 public function format($event)
 {
     $message = new Message();
     $message->setFacility($this->facility)->setLevel($event['priority'])->setShortMessage($event['message'])->setFullMessage($event['message']);
     if (isset($event['extra']['full_message'])) {
         $message->setFullMessage($event['extra']['full_message']);
     }
     if (isset($event['extra']['short'])) {
         $message->setShortMessage($event['extra']['short']);
     }
     if (isset($event['extra']['file'])) {
         $message->setFile($event['extra']['file']);
     }
     if (isset($event['extra']['line'])) {
         $message->setLine($event['extra']['line']);
     }
     if (isset($event['extra']['version'])) {
         $message->setVersion($event['extra']['version']);
     }
     if (isset($event['extra']['facility'])) {
         $message->setFacility($event['extra']['facility']);
     }
     foreach ($event['extra'] as $key => $value) {
         $message->setAdditional($key, $value);
     }
     return $message;
 }
Ejemplo n.º 4
0
 /**
  *
  * {@inheritdoc}
  *
  */
 public function format(array $record)
 {
     $record = parent::format($record);
     $message = new Message();
     $message->setTimestamp($record['datetime'])->setShortMessage((string) $record['message'])->setFacility($record['channel'])->setHost($this->systemName)->setLine(isset($record['extra']['line']) ? $record['extra']['line'] : null)->setFile(isset($record['extra']['file']) ? $record['extra']['file'] : null)->setLevel($this->logLevels[$record['level']]);
     // Do not duplicate these values in the additional fields
     unset($record['extra']['line']);
     unset($record['extra']['file']);
     foreach ($record['extra'] as $key => $val) {
         $message->setAdditional($this->extraPrefix . $key, is_scalar($val) ? $val : $this->toJson($val));
     }
     foreach ($record['context'] as $key => $val) {
         $message->setAdditional($this->contextPrefix . $key, is_scalar($val) ? $val : $this->toJson($val));
     }
     return $message;
 }
 protected function write($level, $shortMessage, Request $request = null, $exception = null, $facility = null, $timestamp = null, $fullMessage = null)
 {
     $message = new Message();
     $message->setHost($this->app['host'])->setAdditional('app_machine', $this->app['machine'])->setAdditional('app_version', $this->app['version'])->setLevel($level)->setShortMessage($shortMessage)->setTimestamp(is_null($timestamp) ? time() : $timestamp);
     if (!is_null($request)) {
         $message->setAdditional('request_url', $request->url())->setAdditional('request_method', $request->method())->setAdditional('request_ip', $request->ip());
         if (config('graylog2.log.inputs.do')) {
             $message->setAdditional('request_inputs', json_encode($request->except(config('graylog2.log.inputs.except'))));
         }
     }
     if (!is_null($exception)) {
         $message->setFullMessage($exception->getMessage())->setFile($exception->getFile())->setLine($exception->getLine())->setAdditional('exception_code', $exception->getCode())->setAdditional('exception_trace', $exception->getTraceAsString());
     }
     if (!is_null($fullMessage)) {
         $message->setFullMessage($fullMessage);
     }
     if (!is_null($facility)) {
         $message->setFacility($facility);
     }
     $this->lastMessage = $message;
     switch (config('graylog2.log.type')) {
         case 'graylog2':
             $this->publisher->publish($message);
             break;
         case 'file':
             $file = 'logs' . DIRECTORY_SEPARATOR . 'graylog2.log';
             $message = $message->toArray();
             $log = [];
             $log[] = "\n";
             $log[] = '[' . date('Y-m-d H:i:s', $message['timestamp']) . ']';
             $log[] = strtoupper($level) . ' in ' . $message['file'] . ' at L' . $message['line'] . ':';
             $log[] = isset($message['facility']) ? "\n" . 'COMPONENT: ' . $message['facility'] : '';
             $log[] = "\r\n" . 'SHORT_MESSAGE: ' . $message['short_message'];
             $log[] = isset($message['full_message']) ? "\n" . 'FULL_MESSAGE: ' . $message['full_message'] : '';
             $log[] = isset($message['_exception_trace']) ? "\n" . 'STRACKTRACE: ' . "\n" . $message['_exception_trace'] : '';
             $log = implode(" ", $log);
             if (!\Storage::disk('local')->exists($file)) {
                 \Storage::disk('local')->put($file, trim($log));
             } else {
                 \Storage::disk('local')->append($file, $log);
             }
             break;
     }
 }
Ejemplo n.º 6
0
 /**
  * Processes log messages and sends them to specific destination.
  * Derived child classes must implement this method.
  * @param array $logs list of messages. Each array element represents one message
  * with the following structure:
  * array(
  *   [0] => message (string)
  *   [1] => level (string)
  *   [2] => category (string)
  *   [3] => timestamp (float, obtained by microtime(true));
  */
 protected function processLogs($logs)
 {
     $publisher = new Gelf\Publisher($this->transport);
     foreach ($logs as $logItem) {
         list($message, $level, $category, $timestamp) = $logItem;
         $gelfMessage = new Gelf\Message();
         if (is_string($message)) {
             $gelfMessage->setShortMessage($message);
         } elseif (!is_array($message)) {
             $gelfMessage->setShortMessage(var_export($message, true));
         } else {
             if (isset($message['message'])) {
                 $gelfMessage->setShortMessage($message['message']);
                 unset($message['message']);
                 foreach ($message as $key => $val) {
                     if (is_string($key)) {
                         $gelfMessage->setAdditional($key, is_string($val) ? $val : var_export($val, true));
                     }
                 }
             } else {
                 $gelfMessage->setShortMessage(var_export($message, true));
             }
         }
         $gelfMessage->setLevel(($_ =& $this->_levels[$level]) ?: LogLevel::INFO)->setTimestamp($timestamp)->setFacility($category)->setAdditional('level_name', strtolower($level));
         foreach ($this->extra as $key => $val) {
             if (is_string($key)) {
                 $gelfMessage->setAdditional($key, is_string($val) ? $val : var_export($val, true));
             }
         }
         if (isset($logItem[4]) && is_array($logItem[4])) {
             $traces = [];
             foreach ($logItem[4] as $index => $trace) {
                 $traces[] = "{$trace['file']}:{$trace['line']}";
                 if (0 === $index) {
                     $gelfMessage->setFile($trace['file']);
                     $gelfMessage->setLine($trace['line']);
                 }
             }
             $gelfMessage->setAdditional('trace', implode("\n", $traces));
         }
         // Publishing message
         $publisher->publish($gelfMessage);
     }
 }
Ejemplo n.º 7
0
 public function testToArrayV11()
 {
     $this->message->setVersion("1.1");
     $this->message->setShortMessage("lorem ipsum");
     $this->message->setAdditional("foo", "bar");
     // check that deperacted behaviour is overridden in 1.1
     $this->message->setLine(50);
     $this->message->setAdditional("line", 100);
     $this->message->setFile("foo/bar");
     $data = $this->message->toArray();
     $this->assertSame('1.1', $data['version']);
     $this->assertSame('lorem ipsum', $data['short_message']);
     $this->assertArrayHasKey('_line', $data);
     $this->assertSame(100, $data['_line']);
     $this->assertArrayNotHasKey('line', $data);
     $this->assertArrayHasKey('_file', $data);
     $this->assertSame('foo/bar', $data['_file']);
     $this->assertArrayNotHasKey('file', $data);
     $this->assertArrayHasKey('_foo', $data);
     $this->assertSame('bar', $data['_foo']);
 }
Ejemplo n.º 8
0
 /**
  * Initializes message-object
  *
  * @param mixed $level
  * @param mixed $rawMessage
  * @param array $context
  * @return Message
  */
 protected function initMessage($level, $message, $context)
 {
     // assert that message is a string, and interpolate placeholders
     $message = (string) $message;
     $message = self::interpolate($message, $context);
     // create message object
     $messageObj = new Message();
     $messageObj->setLevel($level);
     $messageObj->setShortMessage($message);
     $messageObj->setFacility($this->facility);
     foreach ($context as $key => $value) {
         $messageObj->setAdditional($key, $value);
     }
     return $messageObj;
 }
Ejemplo n.º 9
0
 /**
  * @expectedException \InvalidArgumentException
  */
 public function testInvalidAdditionalWithTrimming()
 {
     $this->message->setAdditional(' id ', 'baz');
 }
Ejemplo n.º 10
0
 /**
  * @param array $event
  *
  * @return Message
  */
 public function format($event)
 {
     $message = new Message();
     $message->setHost(gethostname());
     if (isset($event['priority'])) {
         $message->setLevel($event['priority']);
     } else {
         if (isset($event['errno'])) {
             // @todo Convert to syslog error levels?
             $message->setLevel($event['errno']);
         }
     }
     $message->setFullMessage($event['message']);
     $message->setShortMessage($event['message']);
     if (isset($event['full'])) {
         $message->setFullMessage($event['full']);
     }
     if (isset($event['short'])) {
         $message->setShortMessage($event['short']);
     }
     if (isset($event['file'])) {
         $message->setFile($event['file']);
     }
     if (isset($event['line'])) {
         $message->setLine($event['line']);
     }
     if (isset($event['version'])) {
         $message->setVersion($event['version']);
     }
     if (isset($event['facility'])) {
         $message->setFacility($event['facility']);
     } else {
         $message->setFacility($this->_sFacility);
     }
     if (isset($event['extra']) && isset($event['extra']['trace'])) {
         $aTraceOut = [];
         foreach ($event['extra']['trace'] as $aTrace) {
             if (isset($aTrace['file']) && isset($aTrace['line'])) {
                 $aTraceOut[] = sprintf('file: %s | line: %s', $aTrace['file'], $aTrace['line']);
             } elseif (isset($aTrace['function']) && isset($aTrace['class']) && isset($aTrace['type'])) {
                 $aTraceOut[] = sprintf('%s %s %s', $aTrace['class'], $aTrace['type'], $aTrace['function']);
             }
         }
         $message->setAdditional('trace', implode(PHP_EOL, $aTraceOut));
     }
     if ($this->_sLogname != '') {
         $message->setAdditional('logname', $this->_sLogname);
     }
     if (isset($event['timestamp'])) {
         if ($event['timestamp'] instanceof \DateTime) {
             $message->setTimestamp($event['timestamp']->getTimestamp());
         } else {
             $message->setTimestamp($event['timestamp']);
         }
     }
     $aBlackKeys = ['message', 'priority', 'errno', 'full', 'short', 'file', 'line', 'version', 'facility', 'timestamp'];
     foreach ($event as $mKey => $mValue) {
         if (!in_array($mKey, $aBlackKeys)) {
             if (is_array($mValue)) {
                 $rows = [];
                 foreach ($mValue as $mKey2 => $mValue2) {
                     if (is_array($mValue2)) {
                         continue;
                     }
                     $rows[] = sprintf('%s: %s', $mKey2, $mValue2);
                 }
                 $mValue = implode(' | ', $rows);
             }
             $message->setAdditional($mKey, $mValue);
         }
     }
     return $message;
 }