Requêtes de base de données de journaux Magento 2

17

Dans magento 1.x, j'utilise l' n98-magerunoutil pour obtenir un fichier journal pour toutes les requêtes DB:

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

Est-il possible de consigner les requêtes de base de données dans Magento2?

bpoiss
la source

Réponses:

18

vous pouvez ajouter dans l'un de vos modules dans le di.xmlfichier ceci:

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

La Magento\Framework\DB\Adapter\Pdo\Mysqlclasse utilisée pour exécuter les requêtes réelles a un membre enregistreur Magento\Framework\DB\LoggerInterface.
Par défaut, la préférence pour cette dépendance est définie dansapp/etc/di.xml

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

cela Magento\Framework\DB\Logger\Quietne fait rien.

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

changez la préférence en Magento\Framework\DB\Logger\Fileet vous devriez voir les requêtes connectées var/debug/db.log.
Magento est livré avec ces 2 enregistreurs (silencieux et fichier) achetés par défaut, mais vous pouvez créer le vôtre au cas où vous auriez besoin d'une manière différente de consigner les requêtes.

Marius
la source
En passant, la commande OP magerun sera prise en charge sur magerun2 à l'avenir: github.com/netz98/n98-magerun2/issues/75
Raphael at Digital Pianism
2
J'ai dû définir logAllQueries=trueavant qu'ils ne soient enregistrés pour déposer - atwix.com/magento-2/database-queries-logging
Ted
1
Il semble que Magento 2.2 ait introduit une option de configuration de déploiement pour résoudre ce problème. LoggerInterfaceest implémenté par LoggerProxy, non Logger\Quiet, qui à son tour prend les paramètres de la configuration de déploiement. Voir la réponse de @ Felix ( magento.stackexchange.com/a/201517/60128 ).
Jānis Elmeris
23

Au moins dans les versions plus récentes (en regardant un 2.2.1 ici et maintenant), vous pouvez le faire

bin/magento dev:query-log:enable

et avoir de nombreuses connexions var/debug/db.log. N'oubliez pas de désactiver à nouveau la déconnexion avec

bin/magento dev:query-log:disable

.

Felix
la source
3

Pour définir, logAllQueries=truevous pouvez ajouter le code suivant app/etc/di.xmlpour modifier les __construct()paramètres de 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>

Vous pouvez également modifier les autres paramètres $debugFile, $logQueryTimeet $logCallStackde cette façon.

Björn Kraus
la source
0

Voici mon 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
la source