การสืบค้นฐานข้อมูล Magento 2 log


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 Magento มาพร้อมกับตัวบันทึก 2 ตัว (เงียบและไฟล์) ซื้อเป็นค่าเริ่มต้น แต่คุณสามารถสร้างของคุณเองได้ในกรณีที่คุณต้องการวิธีบันทึกการสืบค้นที่แตกต่างกันvar/debug/db.log


ในหมายเหตุด้านคำสั่ง OP magerun จะรองรับ magerun2 ในอนาคต: github.com/netz98/n98-magerun2/issues/75
Raphael ที่ Digital Pianism

2
ฉันต้องตั้งค่าlogAllQueries=trueก่อนที่พวกเขาจะถูกบันทึกไว้ในไฟล์ - atwix.com/magento-2/database-queries-logging
Ted

1
ดูเหมือนว่า Magento 2.2 ได้เปิดตัวตัวเลือกการปรับใช้เพื่อแก้ไขปัญหานี้ LoggerInterfaceถูกใช้งานโดยLoggerProxyไม่ใช่Logger\Quietซึ่งจะรับพารามิเตอร์จากการกำหนดค่าการปรับใช้ ดูคำตอบของ @ Felix ( magento.stackexchange.com/a/201517/60128 )
Jānis Elmeris

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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.