Consultas de base de datos de registro de Magento 2

17

En magento 1.x utilizo la n98-magerunherramienta para obtener un archivo de registro para todas las consultas DB:

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

¿Es posible registrar consultas de bases de datos en Magento2?

bpoiss
fuente

Respuestas:

18

Puede agregar en uno de sus módulos en el di.xmlarchivo esto:

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

La Magento\Framework\DB\Adapter\Pdo\Mysqlclase que se utiliza para ejecutar las consultas reales tiene un miembro registrador Magento\Framework\DB\LoggerInterface.
De forma predeterminada, la preferencia para esta dependencia se establece enapp/etc/di.xml

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

Esto Magento\Framework\DB\Logger\Quietno hace nada.

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

cambie la preferencia a Magento\Framework\DB\Logger\Filey debería ver las consultas iniciadas var/debug/db.log.
Magento viene con estos 2 registradores (Quiet y File) que compran por defecto, pero puede crear los suyos propios en caso de que necesite una forma diferente de registrar consultas.

Marius
fuente
En una nota al margen, el comando OP magerun será compatible con magerun2 en el futuro: github.com/netz98/n98-magerun2/issues/75
Raphael en Digital Pianism
2
Tuve que configurar logAllQueries=trueantes de que se registraran en el archivo - atwix.com/magento-2/database-queries-logging
Ted
1
Parece que Magento 2.2 ha introducido una opción de configuración de implementación para abordar esto. LoggerInterfacese implementa por LoggerProxy, no Logger\Quiet, que a su vez toma parámetros de la configuración de implementación. Ver la respuesta de @ Felix ( magento.stackexchange.com/a/201517/60128 ).
Jānis Elmeris
23

Al menos en versiones más recientes (mirando un 2.2.1 aquí y ahora) puede hacer

bin/magento dev:query-log:enable

y tienen registros extensos var/debug/db.log. No olvides volver a cerrar sesión con

bin/magento dev:query-log:disable

.

Felix
fuente
3

Para configurar logAllQueries=truepuede agregar el siguiente código app/etc/di.xmlpara cambiar los __construct()parámetros 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>

También puede cambiar los otros parámetros $debugFile, $logQueryTimey $logCallStackde esa manera.

Björn Kraus
fuente
0

Aquí está mi 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
fuente