Magento 2 запросов базы данных журнала

17

В magento 1.x я использую n98-magerunинструмент, чтобы получить файл журнала для всех запросов к БД:

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

Можно ли регистрировать запросы к базе данных в Magento2?

bpoiss
источник

Ответы:

18

Вы можете добавить в один из ваших модулей в di.xmlфайле это:

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

У Magento\Framework\DB\Adapter\Pdo\Mysqlкласса, который используется для выполнения реальных запросов, есть член регистратора Magento\Framework\DB\LoggerInterface.
По умолчанию предпочтение этой зависимости устанавливается вapp/etc/di.xml

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

это Magento\Framework\DB\Logger\Quietничего не делает

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

измените предпочтение на, Magento\Framework\DB\Logger\Fileи вы должны увидеть запросы, вошедшие в систему var/debug/db.log.
Magento поставляется с этими 2 регистраторами (Quiet и File) по умолчанию, но вы можете создать свой собственный, если вам нужен другой способ регистрации запросов.

Marius
источник
Кстати, команда OP magerun будет поддерживаться на magerun2 в будущем: github.com/netz98/n98-magerun2/issues/75
Рафаэль в Digital Pianism
2
Я должен был установить, logAllQueries=trueпрежде чем они были зарегистрированы в файл - atwix.com/magento-2/database-queries-logging
Тед
1
Похоже, что Magento 2.2 ввел опцию конфигурации развертывания для решения этой проблемы. LoggerInterfaceреализуется LoggerProxy, а не Logger\Quiet, что, в свою очередь, принимает параметры из конфигурации развертывания. См. Ответ @ Феликса ( magento.stackexchange.com/a/201517/60128 ).
Янис Элмерис
23

По крайней мере, в более новых версиях (глядя на 2.2.1 здесь и сейчас) вы можете сделать

bin/magento dev:query-log:enable

и иметь обширные входы в систему var/debug/db.log. Не забудьте снова выйти из системы с помощью

bin/magento dev:query-log:disable

,

Феликс
источник
3

Для настройки logAllQueries=trueвы можете добавить следующий код app/etc/di.xmlдля изменения __construct()параметров 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>

Вы также можете изменить другие параметры $debugFile, $logQueryTimeи $logCallStackтаким образом.

Бьорн Краус
источник
0

Вот мой 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>
Майк Нгуен
источник