【发布时间】:2015-06-10 19:39:32
【问题描述】:
我是 Symfony2 的新手,我正在寻找一种将 SQL 查询(包括计时)记录到与我的应用程序其余部分相同的日志文件的方法。
根据我从文档中可以确定的内容,这一切都应该开箱即用,但经过几个小时的尝试,我无法弄清楚我做错了什么。
config_dev.yml
monolog:
handlers:
doctrine:
action_level: debug
type: stream
path: %kernel.logs_dir%/%kernel.environment%_doctrine.log
channels: doctrine
config.yml
# 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 的新类,如下所述:http://vvv.tobiassjosten.net/symfony/logging-doctrine-queries-in-symfony2/
但我不知道如何通过配置/服务将其插入以使其适用于项目范围(例如,我不想在每个控制器中调用它)。
非常感谢您的帮助!
【问题讨论】:
-
在 dev 中这是由 symfony 自动完成的。在生产中,不建议这样做,因为它是一个缓慢的过程。
-
@Stev - 当你说“慢”时,你有什么指标可以支持吗?我认为记录数据库查询对于分析性能缓慢的站点和繁重的数据库负载是绝对必要的,我听说这说明了很多关于记录速度慢的问题。我的假设是我们在这里谈论的是微秒,而不是毫秒或几十毫秒?
-
我个人没有指标,但文件写入被认为是一个缓慢的操作。而且随着文件大小的增加,它会变得更慢,即使您使用旋转系统(如操作系统日志记录)构建,您仍然会影响您的应用程序性能。根据我的经验,我选择使用像 newrelic.com 这样的工具来监控慢查询。 MySQL 还有一个配置(但我确信任何数据库引擎都有一个)来记录慢查询(你可以选择慢对你意味着什么,比如>50ms 很慢)dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
标签: php symfony doctrine-orm monolog