Zapytania do bazy danych dziennika Magento 2

17

W magento 1.x używam tego n98-magerunnarzędzia, aby uzyskać plik dziennika dla wszystkich zapytań DB:

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

Czy można rejestrować zapytania do bazy danych w Magento2?

bpoiss
źródło

Odpowiedzi:

18

możesz dodać w di.xmlpliku jeden z modułów :

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

Magento\Framework\DB\Adapter\Pdo\MysqlKlasa, która służy do uruchamiania rzeczywistych zapytań ma człon rejestratora Magento\Framework\DB\LoggerInterface.
Domyślnie preferencje dla tej zależności są ustawione naapp/etc/di.xml

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

to Magento\Framework\DB\Logger\Quietnic nie robi.

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

zmień preferencje na Magento\Framework\DB\Logger\Filei powinieneś zobaczyć zalogowane zapytania var/debug/db.log.
Magento jest standardowo wyposażony w te dwa rejestratory (cichy i plikowy), ale możesz je utworzyć na wypadek, gdybyś potrzebował innego sposobu rejestrowania zapytań.

Marius
źródło
Na marginesie, polecenie magerun OP będzie obsługiwane w przyszłości na magerun2
Raphael at Digital Pianism
2
Musiałem ustawić, logAllQueries=truezanim zostaną zalogowani do pliku - atwix.com/magento-2/database-queries-logging
Ted
1
Wygląda na to, że Magento 2.2 wprowadził opcję konfiguracji wdrożenia, aby rozwiązać ten problem. LoggerInterfacejest implementowany przez LoggerProxy, a nie Logger\Quiet, który z kolei pobiera parametry z konfiguracji wdrażania. Zobacz odpowiedź @ Felixa ( magento.stackexchange.com/a/201517/60128 ).
Jānis Elmeris
23

Przynajmniej w nowszych wersjach (patrząc na 2.2.1 tu i teraz) możesz to zrobić

bin/magento dev:query-log:enable

i loguj się szeroko var/debug/db.log. Nie zapomnij ponownie wylogować się za pomocą

bin/magento dev:query-log:disable

.

Felix
źródło
3

Aby ustawić logAllQueries=true, możesz dodać następujący kod w app/etc/di.xmlcelu zmiany __construct()parametrów 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>

Można również zmienić inne parametry $debugFile, $logQueryTimei $logCallStackw ten sposób.

Björn Kraus
źródło
0

Oto mój plik 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>
Mike Nguyen
źródło