【发布时间】:2013-12-22 05:45:48
【问题描述】:
在 Symfony 命令执行期间,我想将消息记录到不同的文件中。我已经阅读了 Symfony 和 Monolog 文档,它应该像我在这里描述的那样工作。 (请注意,我知道来自 'doctrine'、'event'、... 频道的消息仍将由主处理程序记录,但这对我来说无关紧要)
在我的config.yml,我有这个:
monolog:
channels: [commandline]
handlers:
main:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.main.log"
level: debug
channels: [!commandline]
commandline:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.commandline.log"
level: debug
channels: commandline
stdout:
type: stream
path: "php://stdout"
level: debug
channels: commandline
mail:
type: stream
action_level: alert
handler: buffered_mail
buffered_mail:
type: buffer
handler: swift
swift:
type: swift_mailer
from_email: some@email.com
to_email: some@email.com
subject: "Something went wrong"
level: alert
我希望有 2 个日志文件:dev.main.log 和 dev.commandline.log。
但是我仍然有第三个日志文件:dev.log,它记录了 all 消息。
我似乎没有找到该日志处理程序的定义位置以及如何防止它记录事情......
如果有人能指出我正确的方向,那就太好了!
顺便说一句,我正在使用:
- symfony 2.3
- 独白包 2.4
编辑
config_dev.yml 中没有 monolog 部分
【问题讨论】:
-
请将您的
config_dev.yml的monolog部分添加到问题中。 -
我可以确认我在
dev和prod配置文件中都有monolog,但dev不 记录条目,如果我没有明确调用app_dev.php。所以,这是您遇到的一些最小配置... -
@nifr 您的建议确实非常有效。 @Stivni 您的配置与我的唯一不同的是我在
main记录器中使用fingers_crossed策略 -
我认为他可能已经从他的
config_dev中删除了覆盖main处理程序,但没有清除他的(操作码)缓存或类似的东西。在 symfony 标准中,这个产生logs/<env>.log的默认处理程序在config.yml/config_dev.yml中配置,其他任何地方都没有。唯一的其他原因可能是其他处理程序中某处缺少路径,因为%kernel.logs_dir%/%kernel.environment%.log是 defaultValue of path。 -
@nifr 这些是我一开始就期待的建议。也许您应该将它们包括在您的答案中,然后我将撤销我的反对票。但是:我清除了缓存并没有发现任何变化。您对 path 的 defaultValue 的建议似乎更像我的经验。我将进一步调查它。如果我找到解决方案,我会通知您。
标签: php symfony logging monolog