Làm thế nào để đăng nhập tất cả Magento SQL?


23

Có cách nào dễ dàng để ghi nhật ký tất cả các truy vấn được thực hiện bởi Magento không?

Mục tiêu là in tất cả các SQL được thực thi, ví dụ trong khi tải trang

Câu trả lời:


43

Nếu bạn muốn chắc chắn tất cả SQL thực sự được ghi lại, tôi khuyên bạn nên sử dụng phần mềm của bên thứ ba:

  • Neon Profile SQL thực sự miễn phí và hoạt động tốt
    (bạn cần chỉnh sửa local.xml để đính kèm Magento vào neon ... nó hoạt động như một loại proxy SQL ghi lại mọi thứ đi qua nó)

Thay vào đó, cách tiếp cận Magento / Varien bản địa có thể là cách tiếp cận sau:

  1. chỉnh sửa lib/Varien/Db/Adapter/Pdo/Mysql.php
  2. thay đổi các thuộc tính sau thành true(dòng 103)
  3. bạn sẽ có một tệp nhật ký được tạo ở đây var/debug/pdo_mysql.log

Ở đây dòng để được thay đổi: (ý kiến ​​là tự giải thích)

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

Nhật ký được sản xuất giống như sau:

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

Trong trường hợp bạn đã bật, $_logCallStackbạn cũng sẽ có một phần 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]

15

Kích hoạt Zend SQL Profiler với nút sau trong app/etc/local.xml

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

Sau đó, bạn có thể truy cập trình hồ sơ ở đâu đó trong mã của mình và truy xuất rất nhiều thông tin về tất cả các truy vấn đã thực hiện:

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

Để đơn giản xuất tất cả các truy vấn:

print_r($profiler->getQueryProfiles());

Bạn có thể thêm hai dòng này vào cuối index.phpđể xem tất cả các truy vấn ở cuối mỗi trang. Xin lưu ý rằng điều này sẽ phá vỡ các yêu cầu AJAX trả về phản hồi JSON, vì vậy bạn có thể xem xét ghi nhật ký các truy vấn thay vì in chúng, với mã này (một lần nữa, thêm nó vào cuối index.php):

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

Sau đó, bạn sẽ tìm thấy tất cả các truy vấn trong var/log/queries.log

Đừng quên xóa các dòng một lần nữa sau khi bạn gỡ lỗi xong!


2

Tôi không chắc chắn 100% điều này sẽ bắt được mọi truy vấn, nhưng hầu hết đều chạy qua phương thức truy vấn Zend_Db_Ad CHƯƠNG_Abauge phương thức truy vấn trong

lib / Zend / Db / Adaptor / Tóm tắt.php

Với ý nghĩ đó, bạn có thể tạm thời thêm một số câu lệnh gỡ lỗi (vào bản sao bạn tạo

ứng dụng / mã / cục bộ / Pháp sư

để được an toàn)

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
Tôi nghĩ rằng tôi đã sử dụng một cách tiếp cận tương tự một lần nhưng tôi thấy phương pháp hay hơn do tôi gợi ý :)
Fra

"tạm thời thêm một số tuyên bố gỡ lỗi để được an toàn". Không có gì an toàn trong phương pháp này.
Kevin Schroeder

2

Nếu bạn có quyền truy cập vào máy chủ mysql và bạn không có các dự án khác chạy truy vấn, bạn có thể thử thêm nhật ký chung từ mysql. Xem ở đây về cách thực hiện /programming/6479107/how-to-enable-mysql-query-log vì nó ghi tất cả các truy vấn mà tệp nhật ký có thể lớn rất nhanh, vì vậy hãy chắc chắn bật nó tắt sau khi bạn hoàn thành nó

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.