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; }
/** * {@inheritdoc} */ public function format(array $record) { if (isset($record['context'])) { $record['context'] = parent::format($record['context']); } if (isset($record['extra'])) { $record['extra'] = parent::format($record['extra']); } 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) || null === $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) || null === $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; }
/** * 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); } }
/** * Write a message to the log * * @param array $event log data event * @return void */ protected function doWrite(array $event) { $fullMessage = $this->hasFormatter() ? $this->getFormatter()->format($event) : $event['message']; $message = new Message(); $message->setFacility($this->getFacility()); $message->setShortMessage($event['message']); $message->setFullMessage($fullMessage); $message->setLevel($event['priority']); $this->getPublisher()->publish($message); }
/** * {@inheritdoc} */ public function report($priority, $message, $extra = []) { $grayLogMessage = new Message(); $grayLogMessage->setShortMessage($message); $grayLogMessage->setFullMessage($extra ? print_r($extra, true) : $message); $grayLogMessage->setHost((Console::isConsole() ? 'Console' : $_SERVER['HTTP_HOST'])); $grayLogMessage->setLevel($priority); $grayLogMessage->setTimestamp(time()); $grayLogMessage->setVersion('1.0'); $this->publisher->publish($grayLogMessage); }
protected function setValuesToMessage(Message $message) { $message->setFacility('facility'); $message->setFile('foo.php'); $message->setFullMessage('Full Message'); $message->setHost('example.com'); $message->setLevel(3); $message->setLine(42); $message->setShortMessage('Short Message'); $message->setTimestamp(123456789); $message->setVersion('1.2.3'); }
/** * Write a message to the log * * @param array $event log data event * @return void */ protected function doWrite(array $event) { if ($this->hasFormatter()) { $event = $this->getFormatter()->format($event); } $message = new Message(); $message->setFacility('application'); $message->setShortMessage($event['message']); $message->setFullMessage($event); $message->setLevel($event['priority']); $this->getPublisher()->publish($message); }
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']); }
/** * 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; }
/** * @access protected * @param LogRecord * @return void */ protected function processRecord(\Naucon\Logger\LogRecord $logRecord) { $message = new Message(); $message->setLevel($logRecord->getLevel()); $message->setShortMessage($logRecord->getMessage()); $message->setHost($this->getHost()); $message->setFacility($this->getFacility()); if (method_exists($logRecord, 'getCreated()')) { $message->setTimestamp($logRecord->getCreated()); } else { $message->setTimestamp(time(true)); } $context = $logRecord->getContext(); if (isset($context['exception']) && $context['exception'] instanceof \Exception) { /** * @var \Exception $exception */ $exception = $context['exception']; $message->setFullMessage($exception->getTraceAsString()); $message->setFile($exception->getFile()); $message->setLine($exception->getLine()); } // $message->setAdditional("Additional Field 1", "bla bla"); // $message->setAdditional("Additional Field 2", "lirum larum"); $this->getPublisher()->publish($message); }
/** * @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; }