Existe-t-il un moyen simple de consigner toutes les requêtes exécutées par Magento?
Le but est d'imprimer tout le SQL exécuté, par exemple lors du chargement de la page
Si vous voulez être sûr que tout SQL est réellement connecté, je vous suggère d'utiliser un logiciel tiers:
En variante, une approche native Magento / Varien pourrait être la suivante:
lib/Varien/Db/Adapter/Pdo/Mysql.php
true
(ligne 103)var/debug/pdo_mysql.log
Voici la ligne à changer: (les commentaires sont explicites)
/**
* Write SQL debug data to file
*
* @var bool
*/
protected $_debug = true;
/**
* Minimum query duration time to be logged
*
* @var float
*/
protected $_logQueryTime = 0.05;
/**
* Log all queries (ignored minimum query duration time)
*
* @var bool
*/
protected $_logAllQueries = true;
/**
* Add to log call stack data (backtrace)
*
* @var bool
*/
protected $_logCallStack = true;
Le journal produit est comme le suivant:
## 2014-06-26 12:18:47
## 10258 ## QUERY
SQL: SELECT `adminnotification_inbox`.* FROM `adminnotification_inbox` WHERE (title = 'Customize your order and invoice numbers to protect your sales using Order Number Customizer by XTENTO.') AND (url = 'http://www.xtento.com/magento-extensions/order-number-customizer.html?utm_source=feed&utm_medium=feed&utm_campaign=order_number_customizer')
AFF: 1
TIME: 0.0008
Dans le cas où vous l'avez activé, $_logCallStack
vous aurez également un parte TRACE
TRACE: #1 Varien_Db_Adapter_Pdo_Mysql#00000000644036ff00007f14137095e6#->_debugStat(2, 'SELECT `adminnot...', array(), &Varien_Db_Statement_Pdo_Mysql#000000006440371700007f14137095e6#) called at [lib/Varien/Db/Adapter/Pdo/Mysql.php:424]
#2 Varien_Db_Adapter_Pdo_Mysql#00000000644036ff00007f14137095e6#->query(&Varien_Db_Select#000000006440371800007f14137095e6#, array()) called at [lib/Zend/Db/Adapter/Abstract.php:753]
#3 Varien_Db_Adapter_Pdo_Mysql[Zend_Db_Adapter_Abstract]#00000000644036ff00007f14137095e6#->fetchRow(&Varien_Db_Select#000000006440371800007f14137095e6#) called at [app/code/core/Mage/AdminNotification/Model/Resource/Inbox.php:116]
#4 Mage_AdminNotification_Model_Resource_Inbox#00000000644034c500007f14137095e6#->parse(&Mage_AdminNotification_Model_Inbox#00000000644034e900007f14137095e6#, array(array('severity' => 4, 'date_added' => '2013-10-23 13:00...', 'title' => 'Customizing your...', 'description' => 'Easily add new c...', 'url' => 'http://www.xtent...'), array('severity' => 4, 'date_added' => '2014-04-09 17:00...', 'title' => 'Customize your o...', 'description' => 'Customize your M...', 'url' => 'http://www.xtent...'), array('severity' => 4, 'date_added' => '2014-05-06 17:00...', 'title' => 'Process orders i...', 'description' => 'Process all your...', 'url' => 'http://www.xtent...'))) called at [app/code/core/Mage/AdminNotification/Model/Inbox.php:118]
#5 Mage_AdminNotification_Model_Inbox#00000000644034e900007f14137095e6#->parse(array(array('severity' => 4, 'date_added' => '2013-10-23 13:00...', 'title' => 'Customizing your...', 'description' => 'Easily add new c...', 'url' => 'http://www.xtent...'), array('severity' => 4, 'date_added' => '2014-04-09 17:00...', 'title' => 'Customize your o...', 'description' => 'Customize your M...', 'url' => 'http://www.xtent...'), array('severity' => 4, 'date_added' => '2014-05-06 17:00...', 'title' => 'Process orders i...', 'description' => 'Process all your...', 'url' => 'http://www.xtent...'))) called at [app/code/local/Xtento/XtCore/Model/Feed.php:57]
#6 Xtento_XtCore_Model_Feed#000000006440348500007f14137095e6#->checkUpdate(&Varien_Event_Observer#00000000644034d900007f14137095e6#) called at [app/code/core/Mage/Core/Model/App.php:1338]
#7 Mage_Core_Model_App#00000000644036ef00007f14137095e6#->_callObserverMethod(&Xtento_XtCore_Model_Feed#000000006440348500007f14137095e6#, 'checkUpdate', &Varien_Event_Observer#00000000644034d900007f14137095e6#) called at [app/code/core/Mage/Core/Model/App.php:1317]
#8 Mage_Core_Model_App#00000000644036ef00007f14137095e6#->dispatchEvent('controller_actio...', array('controller_actio...' => &Fishpig_Wordpress_Adminhtml_WordpressController#000000006440364a00007f14137095e6#)) called at [app/Mage.php:451]
#9 Mage::dispatchEvent('controller_actio...', array('controller_actio...' => &Fishpig_Wordpress_Adminhtml_WordpressController#000000006440364a00007f14137095e6#)) called at [app/code/core/Mage/Core/Controller/Varien/Action.php:528]
#10 Fishpig_Wordpress_Adminhtml_WordpressController[Mage_Core_Controller_Varien_Action]#000000006440364a00007f14137095e6#->preDispatch() called at [app/code/core/Mage/Adminhtml/Controller/Action.php:160]
#11 Fishpig_Wordpress_Adminhtml_WordpressController[Mage_Adminhtml_Controller_Action]#000000006440364a00007f14137095e6#->preDispatch() called at [app/code/core/Mage/Core/Controller/Varien/Action.php:408]
#12 Fishpig_Wordpress_Adminhtml_WordpressController[Mage_Core_Controller_Varien_Action]#000000006440364a00007f14137095e6#->dispatch('checkVersion') called at [app/code/core/Mage/Core/Controller/Varien/Router/Standard.php:250]
#13 Mage_Core_Controller_Varien_Router_Admin[Mage_Core_Controller_Varien_Router_Standard]#00000000644036ae00007f14137095e6#->match(&Mage_Core_Controller_Request_Http#000000006440365c00007f14137095e6#) called at [app/code/core/Mage/Core/Controller/Varien/Front.php:176]
#14 Mage_Core_Controller_Varien_Front#000000006440365700007f14137095e6#->dispatch() called at [app/code/core/Mage/Core/Model/App.php:354]
#15 Mage_Core_Model_App#00000000644036ef00007f14137095e6#->run(array('scope_code' => '', 'scope_type' => 'store', 'options' => array())) called at [app/Mage.php:687]
#16 Mage::run('', 'store') called at [index.php:87]
Activez le Zend SQL Profiler avec le nœud suivant dans votre app/etc/local.xml
<resources>
<default_setup>
<connection>
<profiler>1</profiler>
Ensuite, vous pouvez accéder au profileur quelque part dans votre code et récupérer de nombreuses informations sur toutes les requêtes exécutées:
$profiler = Mage::getSingleton('core/resource')->getConnection('core_write')->getProfiler();
Pour simplement afficher toutes les requêtes:
print_r($profiler->getQueryProfiles());
Vous pouvez ajouter ces deux lignes à la fin de index.php
pour voir toutes les requêtes au bas de chaque page. Sachez que cela interrompra les requêtes AJAX qui renvoient une réponse JSON, vous pouvez donc envisager de consigner les requêtes au lieu de les imprimer, avec ce code (encore une fois, ajoutez-le à la fin de index.php
):
$profiler = Mage::getSingleton('core/resource')->getConnection('core_write')->getProfiler();
Mage::log(print_r($profiler->getQueryProfiles(), true), null, 'queries.log', true);
Ensuite, vous trouverez toutes les requêtes dans var/log/queries.log
N'oubliez pas de supprimer à nouveau les lignes une fois le débogage terminé!
Je ne suis pas sûr à 100% que cela interceptera toutes les requêtes, mais la plupart exécutent la méthode de requête Zend_Db_Adapter_Abstract dans
lib / Zend / Db / Adapter / Abstract.php
Dans cet esprit, vous pouvez ajouter temporairement des instructions de débogage (à une copie que vous faites dans
app / code / local / Mage
pour être sûr)
public function query($sql, $bind = array())
{
// connect to the database if needed
$this->_connect();
// is the $sql a Zend_Db_Select object?
if ($sql instanceof Zend_Db_Select) {
if (empty($bind)) {
$bind = $sql->getBind();
}
$sql = $sql->assemble();
}
echo '$sql' . "\n<br />\n";
var_dump($bind);
Si vous avez accès au serveur mysql et que vous n'avez pas d'autres projets qui exécutent des requêtes, vous pouvez essayer d'ajouter le journal général de mysql. Regardez ici comment faire cela /programming/6479107/how-to-enable-mysql-query-log car il écrit toutes les requêtes que le fichier journal peut grossir très rapidement, alors assurez-vous de tourner éteignez-le après que vous en ayez fini.
la source