Php 如何让Doctrine在Symfony2中记录查询
我对Symfony2非常陌生,我正在寻找一种方法,将SQL查询(包括计时)记录到与应用程序其余部分相同的日志文件中 从文档中我可以确定这一切都应该是开箱即用的,但经过几个小时的尝试,我无法找出我做错了什么 config_dev.ymlPhp 如何让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
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以始终启用日志记录。