Magento 2 log database queries
At least in newer versions (looking at a 2.2.1 here and now) you can do
bin/magento dev:query-log:enable
and have extensive logs in var/debug/db.log
. Dont forget to switch logging off again with
bin/magento dev:query-log:disable
.
you can add in one of your modules in the di.xml
file this:
<preference for="Magento\Framework\DB\LoggerInterface" type="Magento\Framework\DB\Logger\File"/>
The Magento\Framework\DB\Adapter\Pdo\Mysql
class that is used to run the actual queries has a logger member Magento\Framework\DB\LoggerInterface
.
By default, the preference for this dependency is set in app/etc/di.xml
<preference for="Magento\Framework\DB\LoggerInterface" type="Magento\Framework\DB\Logger\Quiet"/>
this Magento\Framework\DB\Logger\Quiet
does nothing.
<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\DB\Logger;
class Quiet implements \Magento\Framework\DB\LoggerInterface
{
/**
* {@inheritdoc}
*/
public function log($str)
{
}
/**
* {@inheritdoc}
*/
public function logStats($type, $sql, $bind = [], $result = null)
{
}
/**
* {@inheritdoc}
*/
public function critical(\Exception $e)
{
}
/**
* {@inheritdoc}
*/
public function startTimer()
{
}
}
change the preference to Magento\Framework\DB\Logger\File
and you should see the queries logged in var/debug/db.log
.
Magento comes with these 2 loggers (Quiet and File) buy default, but you can create your own in case you need a different way of logging queries.
To set logAllQueries=true
you can add the following code to app/etc/di.xml
to change __construct()
parameters of Magento\Framework\DB\Logger\File
:
<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>
</arguments>
</type>
You can also change the other parameters $debugFile
, $logQueryTime
and $logCallStack
in that way.