LoggerAbstract.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\DB\Logger;
  7. use Magento\Framework\DB\LoggerInterface;
  8. use Magento\Framework\Debug;
  9. abstract class LoggerAbstract implements LoggerInterface
  10. {
  11. /**
  12. * @var int
  13. */
  14. private $timer;
  15. /**
  16. * @var bool
  17. */
  18. private $logAllQueries;
  19. /**
  20. * @var float
  21. */
  22. private $logQueryTime;
  23. /**
  24. * @var bool
  25. */
  26. private $logCallStack;
  27. /**
  28. * @param bool $logAllQueries
  29. * @param float $logQueryTime
  30. * @param bool $logCallStack
  31. */
  32. public function __construct($logAllQueries = false, $logQueryTime = 0.05, $logCallStack = false)
  33. {
  34. $this->logAllQueries = $logAllQueries;
  35. $this->logQueryTime = $logQueryTime;
  36. $this->logCallStack = $logCallStack;
  37. }
  38. /**
  39. * {@inheritdoc}
  40. */
  41. public function startTimer()
  42. {
  43. $this->timer = microtime(true);
  44. }
  45. /**
  46. * Get formatted statistics message
  47. *
  48. * @param string $type Type of query
  49. * @param string $sql
  50. * @param array $bind
  51. * @param \Zend_Db_Statement_Pdo|null $result
  52. * @return string
  53. * @throws \Zend_Db_Statement_Exception
  54. */
  55. public function getStats($type, $sql, $bind = [], $result = null)
  56. {
  57. $message = '## ' . getmypid() . ' ## ';
  58. $nl = "\n";
  59. $time = sprintf('%.4f', microtime(true) - $this->timer);
  60. if (!$this->logAllQueries && $time < $this->logQueryTime) {
  61. return '';
  62. }
  63. switch ($type) {
  64. case self::TYPE_CONNECT:
  65. $message .= 'CONNECT' . $nl;
  66. break;
  67. case self::TYPE_TRANSACTION:
  68. $message .= 'TRANSACTION ' . $sql . $nl;
  69. break;
  70. case self::TYPE_QUERY:
  71. $message .= 'QUERY' . $nl;
  72. $message .= 'SQL: ' . $sql . $nl;
  73. if ($bind) {
  74. $message .= 'BIND: ' . var_export($bind, true) . $nl;
  75. }
  76. if ($result instanceof \Zend_Db_Statement_Pdo) {
  77. $message .= 'AFF: ' . $result->rowCount() . $nl;
  78. }
  79. break;
  80. }
  81. $message .= 'TIME: ' . $time . $nl;
  82. if ($this->logCallStack) {
  83. $message .= 'TRACE: ' . Debug::backtrace(true, false) . $nl;
  84. }
  85. $message .= $nl;
  86. return $message;
  87. }
  88. }