ใน magento 1.x ฉันใช้n98-magerun
เครื่องมือเพื่อรับไฟล์บันทึกสำหรับการสืบค้น DB ทั้งหมด:
n98-magerun.phar dev:log:db [--on] [--off]
เป็นไปได้หรือไม่ที่จะบันทึกการสืบค้นฐานข้อมูลใน Magento2
ใน magento 1.x ฉันใช้n98-magerun
เครื่องมือเพื่อรับไฟล์บันทึกสำหรับการสืบค้น DB ทั้งหมด:
n98-magerun.phar dev:log:db [--on] [--off]
เป็นไปได้หรือไม่ที่จะบันทึกการสืบค้นฐานข้อมูลใน Magento2
คำตอบ:
คุณสามารถเพิ่มหนึ่งในโมดูลของคุณใน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
logAllQueries=true
ก่อนที่พวกเขาจะถูกบันทึกไว้ในไฟล์ - atwix.com/magento-2/database-queries-logging
LoggerInterface
ถูกใช้งานโดยLoggerProxy
ไม่ใช่Logger\Quiet
ซึ่งจะรับพารามิเตอร์จากการกำหนดค่าการปรับใช้ ดูคำตอบของ @ Felix ( magento.stackexchange.com/a/201517/60128 )
อย่างน้อยในเวอร์ชันที่ใหม่กว่า (ดู 2.2.1 ที่นี่และตอนนี้) คุณสามารถทำได้
bin/magento dev:query-log:enable
var/debug/db.log
และมีการบันทึกอย่างกว้างขวางใน อย่าลืมปิดการเข้าสู่ระบบอีกครั้งด้วย
bin/magento dev:query-log:disable
.
ในการตั้งค่า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
ในทางที่
นี่คือ 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>