Php 如何让Doctrine在Symfony2中记录查询

Php 如何让Doctrine在Symfony2中记录查询,php,symfony,doctrine-orm,monolog,Php,Symfony,Doctrine Orm,Monolog,我对Symfony2非常陌生,我正在寻找一种方法,将SQL查询(包括计时)记录到与应用程序其余部分相同的日志文件中 从文档中我可以确定这一切都应该是开箱即用的,但经过几个小时的尝试,我无法找出我做错了什么 config_dev.yml monolog: handlers: doctrine: action_level: debug type: stream path: %kernel.logs_dir

我对Symfony2非常陌生,我正在寻找一种方法,将SQL查询(包括计时)记录到与应用程序其余部分相同的日志文件中

从文档中我可以确定这一切都应该是开箱即用的,但经过几个小时的尝试,我无法找出我做错了什么

config_dev.yml

monolog:
    handlers:
        doctrine:
            action_level: debug
            type: stream
            path: %kernel.logs_dir%/%kernel.environment%_doctrine.log
            channels: doctrine
# Doctrine Configuration
doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        logging:  true
        profiling:  true

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true
config.yml

monolog:
    handlers:
        doctrine:
            action_level: debug
            type: stream
            path: %kernel.logs_dir%/%kernel.environment%_doctrine.log
            channels: doctrine
# Doctrine Configuration
doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        logging:  true
        profiling:  true

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true
我根本没有生成任何日志文件。我的另一个日志处理程序工作正常(此处未列出)

我想知道我在这里哪里出了错,但是这是否真的是正确的方法,或者我是否应该实现一个实现SQL Logger的新类,如下所述:

但我不知道如何通过配置/服务将其插入,以使其应用于整个项目(例如,我不想在每个控制器中调用它)


非常感谢您的帮助

如果您确实确定需要在生产中记录条令2查询,则可以在条令配置中进行设置

connections:
        # A collection of different named connections (e.g. default, conn2, etc)
        default:
                # when true, queries are logged to a "doctrine" monolog channel
            logging: true 

并将monolog配置为日志,如文档中所述:


类似的问题可以在配置的完整示例中找到:

config/packages/dev/doctrine.yaml

doctrine:
    dbal:
        connections:
            default:
                logging: true

如果您仍然没有monolog,请安装它:
composer需要symfony/monolog bundle
,您应该开始在日志文件中获取所有SQL查询:
var/log/dev.log

在dev中,这是symfony自动完成的。在生产中,这是不可取的,因为这是一个缓慢的过程。@Stev-当你说“缓慢”时,你有什么标准来支持它吗?我认为日志数据库查询对于分析性能较慢的站点和沉重的DB负载是绝对必要的,而且我听说这一点对于日志记录的速度很慢。我的假设是,我们在这里谈论的是微秒,而不是毫秒或几十毫秒?我个人没有指标,但文件写入被认为是一个缓慢的操作。随着文件大小的增加,速度会变慢,即使你建立了一个轮换系统(比如操作系统日志),你仍然会影响你的应用程序性能。根据我的经验,我选择使用诸如监视慢速查询之类的工具。还有一个MySQL配置(但我相信任何DB引擎都有),可以记录慢速查询(你可以选择慢速对你来说意味着什么,比如>50ms就是慢速),太棒了-谢谢。我完全不明白为什么这不起作用(基本上在另一个配置文件中有一个覆盖),但这绝对是正确的答案。这个问题来自2015年的Symfony 2。当然,在Symfony 5上,答案在2020年不起作用。但解决办法很简单。请参阅条令->dbal下的“logging”键,您可以将其设置为true以始终启用日志记录。