QueryLogEnableCommand.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Developer\Console\Command;
  7. use Magento\Framework\DB\Logger\LoggerProxy;
  8. use Symfony\Component\Console\Command\Command;
  9. use Symfony\Component\Console\Input\InputInterface;
  10. use Symfony\Component\Console\Input\InputOption;
  11. use Symfony\Component\Console\Output\OutputInterface;
  12. use Magento\Framework\App\DeploymentConfig\Writer;
  13. use Magento\Framework\Config\File\ConfigFilePool;
  14. class QueryLogEnableCommand extends Command
  15. {
  16. /**
  17. * input parameter log-all-queries
  18. */
  19. const INPUT_ARG_LOG_ALL_QUERIES = 'include-all-queries';
  20. /**
  21. * input parameter log-query-time
  22. */
  23. const INPUT_ARG_LOG_QUERY_TIME = 'query-time-threshold';
  24. /**
  25. * input parameter log-call-stack
  26. */
  27. const INPUT_ARG_LOG_CALL_STACK = 'include-call-stack';
  28. /**
  29. * command name
  30. */
  31. const COMMAND_NAME = 'dev:query-log:enable';
  32. /**
  33. * Success message
  34. */
  35. const SUCCESS_MESSAGE = "DB query logging enabled.";
  36. /**
  37. * @var Writer
  38. */
  39. private $deployConfigWriter;
  40. /**
  41. * QueryLogEnableCommand constructor.
  42. * @param Writer $deployConfigWriter
  43. * @param null $name
  44. */
  45. public function __construct(
  46. Writer $deployConfigWriter,
  47. $name = null
  48. ) {
  49. parent::__construct($name);
  50. $this->deployConfigWriter = $deployConfigWriter;
  51. }
  52. /**
  53. * {@inheritdoc}
  54. */
  55. protected function configure()
  56. {
  57. $this->setName(self::COMMAND_NAME)
  58. ->setDescription('Enable DB query logging')
  59. ->setDefinition(
  60. [
  61. new InputOption(
  62. self::INPUT_ARG_LOG_ALL_QUERIES,
  63. null,
  64. InputOption::VALUE_OPTIONAL,
  65. 'Log all queries. [true|false]',
  66. "true"
  67. ),
  68. new InputOption(
  69. self::INPUT_ARG_LOG_QUERY_TIME,
  70. null,
  71. InputOption::VALUE_OPTIONAL,
  72. 'Query time thresholds.',
  73. "0.001"
  74. ),
  75. new InputOption(
  76. self::INPUT_ARG_LOG_CALL_STACK,
  77. null,
  78. InputOption::VALUE_OPTIONAL,
  79. 'Include call stack. [true|false]',
  80. "true"
  81. ),
  82. ]
  83. );
  84. parent::configure();
  85. }
  86. /**
  87. * {@inheritdoc}
  88. * @throws \InvalidArgumentException
  89. */
  90. protected function execute(InputInterface $input, OutputInterface $output)
  91. {
  92. $data = [LoggerProxy::PARAM_ALIAS => LoggerProxy::LOGGER_ALIAS_FILE];
  93. $logAllQueries = $input->getOption(self::INPUT_ARG_LOG_ALL_QUERIES);
  94. $logQueryTime = $input->getOption(self::INPUT_ARG_LOG_QUERY_TIME);
  95. $logCallStack = $input->getOption(self::INPUT_ARG_LOG_CALL_STACK);
  96. $data[LoggerProxy::PARAM_LOG_ALL] = (int)($logAllQueries != 'false');
  97. $data[LoggerProxy::PARAM_QUERY_TIME] = number_format($logQueryTime, 3);
  98. $data[LoggerProxy::PARAM_CALL_STACK] = (int)($logCallStack != 'false');
  99. $configGroup[LoggerProxy::CONF_GROUP_NAME] = $data;
  100. $this->deployConfigWriter->saveConfig([ConfigFilePool::APP_ENV => $configGroup]);
  101. $output->writeln("<info>". self::SUCCESS_MESSAGE . "</info>");
  102. }
  103. }