/** * Logs with an arbitrary level. * * @param mixed $level * @param string $message * @param mixed $context * @return null */ public static function log($level, $message, $context = null) { // on this place we can allow create unique indexes for the platform of Kibana if (is_array($context) && array_key_exists('exception', $context) && $context['exception'] instanceof \Exception) { $e = $context['exception']; unset($context['exception']); $context = ['value' => $context]; $context['code'] = $e->getCode(); $context['class'] = get_class($e); if (is_string($message)) { $message = trim($message . ' ' . $e->getMessage()); } } else { $context = ['value' => $context]; if ($message instanceof \Exception) { $e = $message; $message = $e->getMessage(); $context['code'] = $e->getCode(); $context['class'] = get_class($e); } else { $e = new DebugException(); } } if ($e instanceof DebugException) { // set real values of fields File and Line (if they will found) $placeTheCall = self::getInfoTheCall($e); $context['trace'] = self::getRealTraceString($e, $placeTheCall); if ($e->getExtra()) { $context['extra'] = $e->getExtra(); } } else { $context['trace'] = $e->getTraceAsString(); } // Exception of lambda function not have this methods if ($e->getFile()) { $context['file'] = $e->getFile(); } if ($e->getLine()) { $context['line'] = $e->getLine(); } if (class_exists('TC\\Logger\\LoggerProfiler')) { $loggerProfiler = \TC\Logger\LoggerProfiler::getInstance(); $context['requestId'] = $loggerProfiler->getRequestId(); $context['subrequestId'] = $loggerProfiler->getSubrequestId(); } if (class_exists('TC\\Logger\\CurrentRequestHelper')) { $context['requestAsCurl'] = (new \TC\Logger\CurrentRequestHelper())->getRequestAsCurl(); } if (class_exists('GuzzleHttp\\Post\\PostBody') && (class_exists('GuzzleHttp\\Exception\\RequestException') && $e instanceof \GuzzleHttp\Exception\RequestException) || class_exists('GuzzleHttp\\Exception\\ConnectException') && $e instanceof \GuzzleHttp\Exception\ConnectException) { $request = $e->getRequest(); $body = $request->getBody(); if ($body instanceof \GuzzleHttp\Post\PostBody && ($fields = $body->getFields())) { // find bad provider if (!empty($fields['providers'][0])) { $context['providerId'] = (int) $fields['providers'][0]; } } $headers = []; foreach ($request->getHeaders() as $name => $values) { $headers[] = $name . ':' . implode(', ', $values); } $context['guzzleRequest'] = ['host' => $request->getHost(), 'url' => $request->getUrl(), 'method' => $request->getMethod(), 'config' => $request->getConfig(), 'headers' => implode('; ', $headers)]; if (interface_exists('GuzzleHttp\\Message\\MessageInterface') && $e->getResponse() instanceof \GuzzleHttp\Message\MessageInterface) { $context['guzzleRequest']['response'] = mb_substr($e->getResponse()->getBody(), 0, self::MAX_LENGTH_BAD_RESPONSE); } } $message = self::export($message); $context = self::getCachedContextDump($level, $message, $context); Cascade::getLogger('mainLogger')->log($level, $message, $context); }
/** * Logs with an arbitrary level. * * @param mixed $level * @param string $message * @param mixed $context * @return null */ private static function log($level, $message, $context = null) { // on this place we can allow create unique indexes for the platform of Kibana $context = ['value' => $context]; if ($message instanceof \Exception) { $e = $message; $message = $e->getMessage(); $context['code'] = $e->getCode(); $context['class'] = get_class($e); } else { $e = new DebugException(); } if ($e instanceof DebugException) { // set real values of fields File and Line (if they will found) $placeTheCall = self::getInfoTheCall($e); $context['trace'] = self::getRealTraceString($e, $placeTheCall); if ($e->getExtra()) { $context['extra'] = $e->getExtra(); } } else { $context['trace'] = $e->getTraceAsString(); } // Exception of lambda function not have this methods if ($e->getFile()) { $context['file'] = $e->getFile(); } if ($e->getLine()) { $context['line'] = $e->getLine(); } if (class_exists('TC\\Logger\\LoggerProfiler')) { $loggerProfiler = \TC\Logger\LoggerProfiler::getInstance(); $context['requestId'] = $loggerProfiler->getRequestId(); $context['subrequestId'] = $loggerProfiler->getSubrequestId(); } if (class_exists('TC\\Logger\\CurrentRequestHelper')) { $context['requestAsCurl'] = (new \TC\Logger\CurrentRequestHelper())->getRequestAsCurl(); } if (class_exists('GuzzleHttp\\Exception\\RequestException') && class_exists('GuzzleHttp\\Post\\PostBody') && $e instanceof \GuzzleHttp\Exception\RequestException) { $request = $e->getRequest(); $body = $request->getBody(); if ($body instanceof \GuzzleHttp\Post\PostBody && ($fields = $body->getFields())) { // find bad provider if (!empty($fields['providers'][0])) { $context['providerId'] = (int) $fields['providers'][0]; } } $headers = []; foreach ($request->getHeaders() as $name => $values) { $headers[$name] = implode(', ', $values); } $context['guzzleRequest'] = ['url' => $request->getUrl(), 'method' => $request->getMethod(), 'config' => $request->getConfig(), 'headers' => implode(': ', $headers)]; } Cascade::getLogger('mainLogger')->log($level, self::export($message), self::dumpContext($context)); }