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?

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.


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

.


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.


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>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.