24

Want to get all Sql queries during the page load.

can any one help me on How to log all Magento 2 SQL queries ?

0

3 Answers 3

37

In your app/etc/di.xml, replace the line:

<preference for="Magento\Framework\DB\LoggerInterface" type="Magento\Framework\DB\Logger\Quiet"/>

with

<preference for="Magento\Framework\DB\LoggerInterface" type="Magento\Framework\DB\Logger\File"/>
<type name="Magento\Framework\DB\Logger\File">
  <arguments>
      <argument name="logAllQueries" xsi:type="boolean">true</argument>
      <argument name="debugFile" xsi:type="string">log/sql.log</argument>
  </arguments>
</type>

Flush Magento cache (in backend, or by executing bin/magento cache:flush) after this.

Log file is located here: var/log/sql.log

2
  • 6
    I am not sure, but this might not work anymore in 2.2 ; at least it doesnt in my case.
    – Felix
    Nov 14, 2017 at 16:45
  • 2
    In latest version of magento (i'm checking on 2.3.1) You can use this: php bin/magento dev:query-log:enable --include-all-queries=1 --query-time-threshold=1 --include-call-stack=false (as mentioned by @Felix below) Jun 12, 2019 at 7:44
41
bin/magento dev:query-log:enable

. (copied my answer from Magento 2 log database queries)

1
  • 1
    This is the correct answer for Magento 2.2 and beyond. As mentioned in the DevDocs page, the queries get logged to var/debug/db.log (not a file in var/log) Nov 7, 2019 at 16:31
6

Alternative (to the answer of Siju Joseph),

if you don't want to change your magento config, you can also configure mysql itself: activate slow.log and set it to 0 seconds.

Therefore edit /etc/mysql/my.cnf and set slow_query_log to 'on' and long_query_time to '0'.

This will result in all mysql queries getting logged.

2
  • How is that done?
    – Felix
    Nov 8, 2017 at 9:24
  • in the my.cnf. Just set slow_query_log to 'on' and long_query_time to '0' Nov 9, 2017 at 13:26

Not the answer you're looking for? Browse other questions tagged or ask your own question.