Magento 2 लॉग डेटाबेस क्वेरीज़


17

Magento 1.x में मैं n98-magerunसभी DB क्वेरी के लिए लॉग फ़ाइल प्राप्त करने के लिए टूल का उपयोग करता हूं :

n98-magerun.phar dev:log:db [--on] [--off]

क्या Magento2 में डेटाबेस क्वेरी लॉग करना संभव है?

जवाबों:


18

आप इसे di.xmlफ़ाइल में अपने किसी एक मॉड्यूल में जोड़ सकते हैं :

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

Magento\Framework\DB\Adapter\Pdo\Mysqlवास्तविक प्रश्नों को चलाने के लिए जिस वर्ग का उपयोग किया जाता है, उसमें एक लकड़हारा सदस्य होता है Magento\Framework\DB\LoggerInterface
डिफ़ॉल्ट रूप से, इस निर्भरता के लिए प्राथमिकता सेट की गई हैapp/etc/di.xml

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

यह Magento\Framework\DB\Logger\Quietकुछ नहीं करता है।

<?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()
    {
    }
}

प्राथमिकता को बदलें Magento\Framework\DB\Logger\Fileऔर आपको लॉग इन प्रश्नों को देखना चाहिए var/debug/db.log
Magento इन 2 लॉगर के साथ आता है (शांत और फ़ाइल) डिफ़ॉल्ट रूप से खरीदता है, लेकिन यदि आप लॉगिंग क्वेरी के एक अलग तरीके की आवश्यकता है तो आप अपना खुद का बना सकते हैं।


साइड नोट पर, भविष्य में ओपी मैगरुन कमांड को magerun2 पर सपोर्ट किया जाएगा: github.com/netz98/n98-magerun2/issues/75
डिजिटल पियानोवादन पर राफेल 10:22

2
मैं सेट किया था logAllQueries=trueइससे पहले कि वे फाइल करने के लिए लॉग इन थे - atwix.com/magento-2/database-queries-logging
टेड

1
ऐसा लगता है कि Magento 2.2 ने इसे संबोधित करने के लिए परिनियोजन कॉन्फ़िगरेशन विकल्प प्रस्तुत किया है। LoggerInterfaceद्वारा लागू किया जाता है LoggerProxy, नहीं Logger\Quiet, जो बदले में तैनाती कॉन्फ़िगरेशन से पैरामीटर लेता है। @ फेलिक्स का उत्तर ( magento.stackexchange.com/a/201517/60128 ) देखें।
जैनीस एल्मेरिस

23

कम से कम नए संस्करणों में (यहां और अब 2.2.1 को देखते हुए) आप कर सकते हैं

bin/magento dev:query-log:enable

और व्यापक लॉग इन हैं var/debug/db.log। फिर से लॉगिंग बंद करना न भूलें

bin/magento dev:query-log:disable


3

सेट करने के लिए logAllQueries=trueआप के लिए निम्न कोड जोड़ सकते हैं app/etc/di.xmlबदलने के लिए __construct()के मापदंडों 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>

आप अन्य मापदंडों को भी बदल सकते हैं $debugFile, $logQueryTimeऔर $logCallStackइस तरह से।


0

यहाँ मेरा di.xml है

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <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">sql.log</argument>
        </arguments>
    </type>

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