Magento 2 mencatat kueri basis data

17

Di magento 1.x saya menggunakan n98-magerunalat ini untuk mendapatkan file log untuk semua Permintaan DB:

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

Apakah mungkin untuk mencatat kueri basis data di Magento2?

Kapten
sumber

Jawaban:

18

Anda dapat menambahkan salah satu modul Anda di di.xmlfile ini:

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

The Magento\Framework\DB\Adapter\Pdo\Mysqlkelas yang digunakan untuk menjalankan query yang sebenarnya memiliki anggota logger Magento\Framework\DB\LoggerInterface.
Secara default, preferensi untuk ketergantungan ini ditetapkanapp/etc/di.xml

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

ini Magento\Framework\DB\Logger\Quiettidak melakukan apa-apa.

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

ubah preferensi menjadi Magento\Framework\DB\Logger\Filedan Anda akan melihat kueri masuk var/debug/db.log.
Magento hadir dengan 2 penebang ini (Tenang dan File) default pembelian, tetapi Anda dapat membuatnya sendiri jika Anda membutuhkan cara lain untuk mencatat kueri.

Marius
sumber
Sebagai tambahan, perintah OP magerun akan didukung di magerun2 di masa mendatang: github.com/netz98/n98-magerun2/issues/75
Raphael di Digital Pianism
2
Saya harus mengatur logAllQueries=truesebelum mereka login ke file - atwix.com/magento-2/database-queries-logging
Ted
1
Tampaknya Magento 2.2 telah memperkenalkan opsi konfigurasi penempatan untuk mengatasi hal ini. LoggerInterfacediimplementasikan oleh LoggerProxy, bukan Logger\Quiet, yang pada gilirannya mengambil parameter dari konfigurasi penempatan. Lihat jawaban @ Felix ( magento.stackexchange.com/a/201517/60128 ).
Jānis Elmeris
23

Setidaknya dalam versi yang lebih baru (melihat 2.2.1 di sini dan sekarang) yang dapat Anda lakukan

bin/magento dev:query-log:enable

dan memiliki log yang luas var/debug/db.log. Jangan lupa mematikan log lagi dengan

bin/magento dev:query-log:disable

.

Felix
sumber
3

Untuk mengatur logAllQueries=trueAnda dapat menambahkan kode berikut app/etc/di.xmluntuk mengubah __construct()parameter 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>

Anda juga dapat mengubah parameter lainnya $debugFile, $logQueryTimedan $logCallStackdengan cara itu.

Björn Kraus
sumber
0

Inilah di.xml saya

<?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>
Mike Nguyen
sumber