示例#1
0
 /**
  * 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);
 }
示例#2
0
文件: Log.php 项目: yapro/debug
 /**
  * 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));
 }