private static function dump($struct) { if (class_exists('Nette\\Diagnostics\\Dumper')) { return Nette\Diagnostics\Dumper::toText($struct); } return Nette\Diagnostics\Helpers::textDump($struct); }
/** @deprecated */ public static function textDump($var) { trigger_error(__METHOD__ . '() is deprecated; use Nette\\Diagnostics\\Dumper::toText() instead.', E_USER_DEPRECATED); return Dumper::toText($var); }
/** * Logs message or exception to file (if not disabled) and sends email notification (if enabled). * @param string|Exception * @param int one of constant Debugger::INFO, WARNING, ERROR (sends email), CRITICAL (sends email) * @return string logged error filename */ public static function log($message, $priority = self::INFO) { if (self::$logDirectory === FALSE) { return; } elseif (!self::$logDirectory) { throw new Nette\InvalidStateException('Logging directory is not specified in Nette\\Diagnostics\\Debugger::$logDirectory.'); } $exceptionFilename = NULL; if ($message instanceof \Exception) { $exception = $message; while ($exception) { $tmp[] = ($exception instanceof ErrorException ? 'Fatal error: ' . $exception->getMessage() : get_class($exception) . ": " . $exception->getMessage()) . " in " . $exception->getFile() . ":" . $exception->getLine(); $exception = $exception->getPrevious(); } $exception = $message; $message = implode($tmp, "\ncaused by "); $hash = md5(preg_replace('~(Resource id #)\\d+~', '$1', $exception)); $exceptionFilename = "exception-" . @date('Y-m-d-H-i-s') . "-{$hash}.html"; foreach (new \DirectoryIterator(self::$logDirectory) as $entry) { if (strpos($entry, $hash)) { $exceptionFilename = $entry; $saved = TRUE; break; } } } elseif (!is_string($message)) { $message = Dumper::toText($message); } if ($exceptionFilename) { $exceptionFilename = self::$logDirectory . '/' . $exceptionFilename; if (empty($saved) && ($logHandle = @fopen($exceptionFilename, 'w'))) { ob_start(); // double buffer prevents sending HTTP headers in some PHP ob_start(function ($buffer) use($logHandle) { fwrite($logHandle, $buffer); }, 4096); self::getBlueScreen()->render($exception); ob_end_flush(); ob_end_clean(); fclose($logHandle); } } self::getLogger()->log(array(@date('[Y-m-d H-i-s]'), trim($message), self::$source ? ' @ ' . self::$source : NULL, $exceptionFilename ? ' @@ ' . basename($exceptionFilename) : NULL), $priority); return $exceptionFilename ? strtr($exceptionFilename, '\\/', DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR) : NULL; }
/** * Log a message * @param Exception|string|array $message * @param null|string $identifier * @param null|int $priority * @param null|array $args * @throws InvalidArgumentException */ public function message($message, $identifier = NULL, $priority = NULL, $args = NULL) { if (!$message) { throw new InvalidArgumentException('The message has to be specified.'); } if ($priority == NULL) { $priority = $this->defaultLogLevel; } if ($priority < self::INFO || $priority > self::WARNING) { throw new InvalidArgumentException('Default Log Level must be one of the NasExt\\Logger\'s priority constants.'); } $exception = NULL; $exceptionFilename = NULL; if ($message instanceof \Exception) { $exception = ($message instanceof FatalErrorException ? 'Fatal error: ' . $message->getMessage() : 'HTTP code' . $message->getCode() . ':: ' . get_class($message) . ": " . $message->getMessage()) . " in " . $message->getFile() . ":" . $message->getLine(); $exceptionFilename = $this->generateExceptionFile($message); $message = $message->getMessage(); } if (!is_string($args)) { $args = Json::encode($args); } if (!is_string($message)) { $message = Dumper::toText($message); } $this->loggerRepository->save($message, $exception, $exceptionFilename, $identifier, $priority, $args); }