Сейчас для профайлинга использую что-то вроде
logging.apache.org/log4php/apidocs/class-LoggerNDC.html.
Код выглядит примерно так:
public static function query($query, $throwError = true) {
Log::push($query);
if (!$r = self::getInstance()->query($query, PDO::FETCH_ASSOC)) {
Log::pop($query);
if ($throwError)
throw new Exception($query . "\n" . print_r(self::getInstance()->errorInfo(), 1));
else
return false;
}
Log::pop($query);
return $r;
}
Т.е. мы оборачиваем некий контекст, замеряем время его выполнения, к примеру. Для этого приходится вызывать push() и pop() (2 строки кода) и в некоторых случаях проставлять pop() перед обработкой исключений (уже 3 и более строк кода).
В идеале хочется одним вызовом, например, через call_user_func проворачивать профайлинг, но должна быть также возможность его отключать для продакшна.
А как Вы реализуете профайлинг в php?