Query del database di log di Magento 2


17

In magento 1.x utilizzo lo n98-magerunstrumento per ottenere un file di registro per tutte le query DB:

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

È possibile registrare le query del database in Magento2?

Risposte:


18

puoi aggiungere in uno dei tuoi moduli nel di.xmlfile questo:

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

La Magento\Framework\DB\Adapter\Pdo\Mysqlclasse utilizzata per eseguire le query effettive ha un membro logger Magento\Framework\DB\LoggerInterface.
Per impostazione predefinita, è impostata la preferenza per questa dipendenzaapp/etc/di.xml

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

questo Magento\Framework\DB\Logger\Quietnon fa nulla.

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

cambia la preferenza in Magento\Framework\DB\Logger\Filee dovresti vedere le query registrate var/debug/db.log.
Magento viene fornito con questi 2 logger (Quiet e File) compra predefiniti, ma puoi crearne uno tuo nel caso in cui sia necessario un modo diverso di registrare le query.


In una nota a margine, il comando OP magerun sarà supportato su magerun2 in futuro: github.com/netz98/n98-magerun2/issues/75
Raffaello al Pianismo digitale

2
Ho dovuto impostare logAllQueries=trueprima che fossero registrati su file - atwix.com/magento-2/database-queries-logging
Ted

1
Sembra che Magento 2.2 abbia introdotto un'opzione di configurazione di distribuzione per risolvere questo problema. LoggerInterfaceè implementato da LoggerProxy, non Logger\Quiet, che a sua volta prende i parametri dalla configurazione di distribuzione. Vedi la risposta di @Felix ( magento.stackexchange.com/a/201517/60128 ).
Jānis Elmeris,

23

Almeno nelle versioni più recenti (guardando una 2.2.1 qui e ora) puoi farlo

bin/magento dev:query-log:enable

e dispone di estesi accessi var/debug/db.log. Non dimenticare di disattivare nuovamente la disconnessione con

bin/magento dev:query-log:disable

.


3

Per impostare logAllQueries=trueè possibile aggiungere il seguente codice app/etc/di.xmlper modificare i __construct()parametri di 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>

Puoi anche cambiare gli altri parametri $debugFile, $logQueryTimee $logCallStackin quel modo.


0

Ecco il mio 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.