Запити до бази даних журналу Magento 2


17

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

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

Чи можливо записувати запити до бази даних у Magento2?

Відповіді:


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 постачається з тими двома реєстраторами (Quiet and File), які купують за замовчуванням, але ви можете створити свій власний, якщо вам потрібен інший спосіб реєстрації запитів.


Зі сторони, в майбутньому команда OP magerun буде підтримуватися на magerun2: github.com/netz98/n98-magerun2/isissue/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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.