Consultas do banco de dados Magento 2

17

No magento 1.x, uso a n98-magerunferramenta para obter um arquivo de log para todas as consultas de banco de dados:

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

É possível registrar consultas de banco de dados no Magento2?

bpoiss
fonte

Respostas:

18

você pode adicionar em um de seus módulos no di.xmlarquivo isto:

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

A Magento\Framework\DB\Adapter\Pdo\Mysqlclasse usada para executar as consultas reais possui um membro do criador de logs Magento\Framework\DB\LoggerInterface.
Por padrão, a preferência por essa dependência é definida emapp/etc/di.xml

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

isso Magento\Framework\DB\Logger\Quietnão faz 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()
    {
    }
}

altere a preferência para Magento\Framework\DB\Logger\Filee você deverá ver as consultas efetuadas var/debug/db.log.
O Magento vem com esses 2 loggers (Quiet and File), por padrão, mas você pode criar o seu próprio caso precise de uma maneira diferente de registrar as consultas.

Marius
fonte
Em uma nota lateral, o comando OP magerun será suportado no magerun2 no futuro: github.com/netz98/n98-magerun2/issues/75
Raphael em Digital pianismo
2
Eu tinha de conjunto logAllQueries=trueantes de serem registrados para o arquivo - atwix.com/magento-2/database-queries-logging
Ted
1
Parece que o Magento 2.2 introduziu uma opção de configuração de implantação para resolver isso. LoggerInterfaceé implementado por LoggerProxy, não Logger\Quiet, que, por sua vez, obtém parâmetros da configuração de implantação. Veja a resposta de @ Felix ( magento.stackexchange.com/a/201517/60128 ).
Jānis Elmeris
23

Pelo menos nas versões mais recentes (olhando para a 2.2.1 aqui e agora), você pode fazer

bin/magento dev:query-log:enable

e ter registros extensos var/debug/db.log. Não se esqueça de desativar o logoff novamente com

bin/magento dev:query-log:disable

.

Felix
fonte
3

Para definir, logAllQueries=truevocê pode adicionar o código a seguir app/etc/di.xmlpara alterar os __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>

Você também pode alterar os outros parâmetros $debugFile, $logQueryTimee $logCallStackdessa forma.

Björn Kraus
fonte
0

Aqui está o meu 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
fonte