कैसे सभी Magento के SQL लॉग इन करें?


23

क्या Magento द्वारा निष्पादित सभी क्वेरी को लॉग करने का कोई आसान तरीका है?

लक्ष्य सभी एसक्यूएल निष्पादित को प्रिंट करना है, उदाहरण के लिए पेज लोड के दौरान

जवाबों:


43

यदि आप सुनिश्चित करना चाहते हैं कि सभी SQL वास्तव में लॉग इन हैं, तो मैं तीसरे पक्ष के सॉफ़्टवेयर का उपयोग करने का सुझाव देता हूं:

  • नियॉन प्रोफाइल एसक्यूएल वास्तव में स्वतंत्र है और ठीक काम करता है
    (आपको नियॉन को मैगनेट संलग्न करने के लिए local.xml को संपादित करने की आवश्यकता है ... यह एक तरह का SQL प्रॉक्सी लॉगिंग के रूप में काम करता है जो इसके माध्यम से गुजरता है)

वैकल्पिक रूप से एक देशी Magento / वेरिएन दृष्टिकोण निम्नलिखित हो सकता है:

  1. संपादित करें lib/Varien/Db/Adapter/Pdo/Mysql.php
  2. निम्न गुणों को बदलें true(लाइन 103)
  3. आपके पास यहां एक लॉग फाइल बनाई जाएगी var/debug/pdo_mysql.log

यहां लाइन बदलनी होगी: (टिप्पणियाँ स्वयं व्याख्यात्मक हैं)

 /**
     * 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;

उत्पादित लॉग निम्न की तरह हैं:

## 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

यदि आपने सक्षम किया है तो आपके पास $_logCallStackएक TRACE parte भी होगा

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]

15

अपने में निम्नलिखित नोड के साथ Zend SQL Profiler सक्रिय करें app/etc/local.xml

<resources>
 <default_setup>
  <connection>
   <profiler>1</profiler>

तब आप अपने कोड में प्रोफाइलर को कहीं भी एक्सेस कर सकते हैं और सभी निष्पादित प्रश्नों के बारे में बहुत सारी जानकारी प्राप्त कर सकते हैं:

$profiler = Mage::getSingleton('core/resource')->getConnection('core_write')->getProfiler();

बस सभी प्रश्नों का उत्पादन करने के लिए:

print_r($profiler->getQueryProfiles());

आप index.phpप्रत्येक पृष्ठ के नीचे सभी प्रश्नों को देखने के लिए इन दो पंक्तियों को जोड़ सकते हैं । ध्यान रखें कि यह AJAX अनुरोधों को तोड़ देगा जो JSON प्रतिक्रिया देता है, इसलिए आप उन्हें इस कोड के साथ, फिर से प्रिंट करने के बजाय प्रश्नों को लॉग करने पर विचार कर सकते हैं (फिर से, इसे अंत में जोड़ें index.php):

$profiler = Mage::getSingleton('core/resource')->getConnection('core_write')->getProfiler();
Mage::log(print_r($profiler->getQueryProfiles(), true), null, 'queries.log', true);

फिर आपको सभी प्रश्न मिलेंगे var/log/queries.log

डिबगिंग समाप्त करने के बाद फिर से लाइनें निकालना न भूलें!


2

मुझे यकीन नहीं है कि यह 100% हर क्वेरी को पकड़ लेगा, लेकिन अधिकांश क्वेरी पद्धति Zend_Db_Adapter_Abb क्वेरी के माध्यम से चलती है

lib / Zend / DB / एडाप्टर / Abstract.php

इसे ध्यान में रखते हुए, आप अस्थायी रूप से कुछ डिबगिंग स्टेटमेंट्स जोड़ सकते हैं (एक कॉपी में जो आप बनाते हैं

एप्लिकेशन / कोड / स्थानीय / दाना

सुरक्षित रहने के लिए)

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);

2
मुझे लगता है कि मैंने एक बार एक समान दृष्टिकोण का उपयोग किया है, लेकिन मुझे मेरे द्वारा सुझाई गई विधि अधिक अच्छी
लगी

"अस्थायी रूप से सुरक्षित होने के लिए कुछ डिबगिंग स्टेटमेंट जोड़ें"। इस दृष्टिकोण में कुछ भी सुरक्षित नहीं है।
केविन श्रोएडर

2

यदि आपके पास mysql सर्वर तक पहुंच है और आपके पास अन्य प्रोजेक्ट नहीं हैं जो क्वेरी चलाते हैं, तो आप mysql से सामान्य लॉग को जोड़ने का प्रयास कर सकते हैं। यहां देखें कि कैसे करें कि /programming/6479107/how-to-enable-mysql-query-log क्योंकि यह सभी प्रश्न लिखता है कि लॉग फ़ाइल बहुत तेजी से बड़ी हो सकती है, इसलिए इसे चालू करना सुनिश्चित करें जब आप इसके साथ कर लें, तो इसे बंद कर दें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.