Magento 2日志数据库查询


17

在magento 1.x中,我使用该n98-magerun工具来获取所有数据库查询的日志文件:

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

是否可以在Magento2中记录数据库查询?

Answers:


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附带了这两种记录器(安静和文件记录器)的默认购买价,但是您可以创建自己的记录器,以防需要其他记录查询的方式。


附带说明一下,将来将在magerun2上支持OP magerun命令:github.com/netz98/n98-magerun2/issues/75
Digital Pianism的Raphael,2016年

2
我必须在将logAllQueries=true它们记录到文件之前进行设置– atwix.com/magento-2/database-queries-logging
Ted

1
Magento 2.2似乎已经引入了部署配置选项来解决此问题。LoggerInterface是由LoggerProxy而不是实施的,Logger\Quiet反过来又从部署配置中获取参数。请参阅@Felix的答案(magento.stackexchange.com/a/201517/60128)。
雅尼斯·埃默里斯(JānisElmeris)'17

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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.