$out = "\$$variable_name = $out";
}
else {
- // use var_dump
- ob_start();
- var_dump($variable);
- $dump = ob_get_contents();
- ob_end_clean();
+ // Use Symfony var-dumper to avoid circular references that exhaust
+ // memory when using var_dump().
+ // Use its CliDumper since if we use the simpler `dump()` then it
+ // comes out as some overly decorated html which is hard to read.
+ $dump = (new \Symfony\Component\VarDumper\Dumper\CliDumper('php://output'))
+ ->dump(
+ (new \Symfony\Component\VarDumper\Cloner\VarCloner())->cloneVar($variable),
+ TRUE);
$out = "\n\$$variable_name = $dump";
}
// reset if it is an array
* @param string $string
*/
public static function debug_query($string) {
- if (!defined('CIVICRM_DEBUG_LOG_QUERY')) {
- // TODO: When its updated to support getenv(), call CRM_Utils_Constant::value('CIVICRM_DEBUG_LOG_QUERY', FALSE)
- define('CIVICRM_DEBUG_LOG_QUERY', getenv('CIVICRM_DEBUG_LOG_QUERY'));
- }
- if (CIVICRM_DEBUG_LOG_QUERY === 'backtrace') {
+ $debugLogQuery = CRM_Utils_Constant::value('CIVICRM_DEBUG_LOG_QUERY', FALSE);
+ if ($debugLogQuery === 'backtrace') {
CRM_Core_Error::backtrace($string, TRUE);
}
- elseif (CIVICRM_DEBUG_LOG_QUERY) {
- CRM_Core_Error::debug_var('Query', $string, TRUE, TRUE, 'sql_log' . CIVICRM_DEBUG_LOG_QUERY, PEAR_LOG_DEBUG);
+ elseif ($debugLogQuery) {
+ CRM_Core_Error::debug_var('Query', $string, TRUE, TRUE, 'sql_log' . $debugLogQuery, PEAR_LOG_DEBUG);
}
}
/**
* Render an exception as HTML string.
*
- * @param Exception $e
+ * @param Throwable $e
* @return string
* printable HTML text
*/
- public static function formatHtmlException(Exception $e) {
+ public static function formatHtmlException(Throwable $e) {
$msg = '';
// Exception metadata
/**
* Write details of an exception to the log.
*
- * @param Exception $e
+ * @param Throwable $e
* @return string
* printable plain text
*/
- public static function formatTextException(Exception $e) {
+ public static function formatTextException(Throwable $e) {
$msg = get_class($e) . ": \"" . $e->getMessage() . "\"\n";
$ei = $e;
$callerClass = $dbt[1]['class'] ?? NULL;
$oldMethod = "{$callerClass}::{$callerFunction}";
}
- Civi::log()->warning("Deprecated function $oldMethod, use $newMethod.", ['civi.tag' => 'deprecated']);
+ self::deprecatedWarning("Deprecated function $oldMethod, use $newMethod.");
+ }
+
+ /**
+ * Output a deprecated notice about a deprecated call path, rather than deprecating a whole function.
+ * @param string $message
+ */
+ public static function deprecatedWarning($message) {
+ Civi::log()->warning($message, ['civi.tag' => 'deprecated']);
}
}