Magento 2ログデータベースクエリ


17

magento 1.xでは、n98-magerunツールを使用してすべてのDBクエリのログファイルを取得します。

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

Magento2でデータベースクエリをログに記録することはできますか?

回答:


18

次のdi.xmlファイルにモジュールの1つを追加できます。

<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)がデフォルトで購入されていますが、クエリのロギングに別の方法が必要な場合は、独自のロガーを作成できます。


補足として、OP magerunコマンドは、将来的にmagerun2でサポートされます:github.com/netz98/n98-magerun2/issues/75
Digital PianismのRaphael

2
logAllQueries=trueファイルに記録される前に設定する必要がありました– atwix.com/magento-2/database-queries-logging
Ted

1
Magento 2.2には、これに対処するための展開構成オプションが導入されているようです。LoggerInterfaceLoggerProxy、ではなくによって実装され、Logger\Quiet展開設定からパラメータを取得します。@Felixの回答(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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.