Magento 2-Protokolldatenbankabfragen

17

In Magento 1.x benutze ich das n98-magerunTool, um eine Protokolldatei für alle DB-Abfragen zu erhalten:

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

Ist es möglich, Datenbankabfragen in Magento2 zu protokollieren?

bpoiss
quelle

Antworten:

18

Sie können in einem Ihrer Module in der di.xmlDatei Folgendes hinzufügen :

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

Die Magento\Framework\DB\Adapter\Pdo\MysqlKlasse, mit der die eigentlichen Abfragen ausgeführt werden, verfügt über ein Protokollierungsmitglied Magento\Framework\DB\LoggerInterface.
Standardmäßig ist die Einstellung für diese Abhängigkeit in festgelegtapp/etc/di.xml

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

das Magento\Framework\DB\Logger\Quietmacht nichts.

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

Ändern Sie die Einstellung in Magento\Framework\DB\Logger\Fileund Sie sollten die angemeldeten Abfragen sehen var/debug/db.log.
Magento wird standardmäßig mit diesen 2 Loggern (Quiet und File) ausgeliefert. Sie können jedoch Ihre eigenen Logger erstellen, falls Sie eine andere Art der Protokollierung von Abfragen benötigen.

Marius
quelle
Nebenbei bemerkt wird der OP-Befehl magerun in Zukunft von magerun2 unterstützt: github.com/netz98/n98-magerun2/issues/75
Raphael bei Digital Pianism
2
Ich musste festlegen, logAllQueries=truebevor sie in der Datei - atwix.com/magento-2/database-queries-logging
Ted
1
Es scheint, dass Magento 2.2 eine Konfigurationsoption für die Bereitstellung eingeführt hat, um dies zu beheben. LoggerInterfacewird implementiert von LoggerProxy, nicht Logger\Quiet, was wiederum Parameter aus der Bereitstellungskonfiguration übernimmt. Siehe die Antwort von @ Felix ( magento.stackexchange.com/a/201517/60128 ).
Jānis Elmeris
23

Zumindest in neueren Versionen (siehe 2.2.1 hier und jetzt) ​​ist dies möglich

bin/magento dev:query-log:enable

und haben umfangreiche Logins var/debug/db.log. Vergessen Sie nicht, die Abmeldung wieder mit abzuschalten

bin/magento dev:query-log:disable

.

Felix
quelle
3

Zum Einstellen logAllQueries=truekönnen Sie den folgenden Code hinzufügen, app/etc/di.xmlum die __construct()Parameter zu ändern 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>

Sie können auch die anderen Parameter ändern $debugFile, $logQueryTimeund $logCallStackauf diese Weise.

Björn Kraus
quelle
0

Hier ist meine 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
quelle