logMessageFormat = $logMessageFormat; $this->allowInlineLineBreaks = $allowInlineLineBreaks; } public function format(array $record) { $class = isset($record['extra']['class']) ? $record['extra']['class'] : ''; $date = $record['datetime']->format('Y-m-d H:i:s T'); $message = trim($record['message']); if ($this->allowInlineLineBreaks) { $message = str_replace("\n", "\n ", $message); // intend lines $messages = array($message); } else { $messages = explode("\n", $message); } $total = ''; foreach ($messages as $message) { $message = $this->prefixMessageWithRequestId($record, $message); $total .= $this->formatMessage($class, $message, $date, $record); } return $total; } private function formatMessage($class, $message, $date, $record) { $trace = isset($record['context']['trace']) ? self::formatTrace($record['context']['trace']) : ''; $message = str_replace( array('%tag%', '%message%', '%datetime%', '%level%', '%trace%'), array($class, $message, $date, $record['level_name'], $trace), $this->logMessageFormat ); $message = trim($message) . "\n"; return $message; } private static function formatTrace(array $trace, $numLevels = 10) { $strTrace = ''; for ($i = 0; $i < $numLevels; $i++) { if (!isset($trace[$i])) { continue; } $level = $trace[$i]; $levelTrace = ''; if (isset($level['file'], $level['line'])) { $levelTrace = '#' . $i . (str_replace(PIWIK_DOCUMENT_ROOT, '', $level['file'])) . '(' . $level['line'] . ')'; } elseif (isset($level['class'], $level['type'], $level['function'])) { $levelTrace = '[internal function]: ' . $level['class'] . $level['type'] . $level['function'] . '()'; } if ($levelTrace) { $strTrace .= $levelTrace . ","; } } return trim($strTrace, ","); } public function formatBatch(array $records) { foreach ($records as $key => $record) { $records[$key] = $this->format($record); } return $records; } private function prefixMessageWithRequestId(array $record, $message) { $requestId = isset($record['extra']['request_id']) ? $record['extra']['request_id'] : ''; $message = trim($message); if ($requestId) { $message = '[' . $requestId . '] ' . $message; } return $message; } }