我无法让symfony2配置正确覆盖其他配置文件中的值.这是问题所在:
我有一个新的环境"staging"我想要使用来自config_prod.yml的大部分内容但是有另一个日志记录级别(我希望它在开发中,只需将所有内容记录到文件中).这是我使用的配置内容:
config_prod.yml:
imports:
- { resource: config.yml }
monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: nested
nested:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: debug
Run Code Online (Sandbox Code Playgroud)
config_staging.yml:
imports:
- { resource: config_prod.yml }
monolog:
handlers:
main:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: debug
nested: ~
Run Code Online (Sandbox Code Playgroud)
从我的角度来看,嵌套记录器现在为null,主记录到给定文件.真正发生的是他将每条消息记录两次!当我将它用于config_staging.yml时也会发生同样的情况:
imports:
- { resource: config_prod.yml }
monolog:
handlers:
main:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: debug
handler: ~
nested: ~
Run Code Online (Sandbox Code Playgroud)
我找到了一个解决方法,将主处理程序的action_level设置为debug并将其他所有内容保留原样,但我不喜欢这个解决方案.必须有一种方法来覆盖配置的东西,所以我只有主要的monolog处理程序.
差不多一年后,我现在了解发生了什么以及如何防止它:
该nested
处理程序是befilled与来自配置config.yml
和解析时config_staging.yml
,该YAML部件不会覆盖整个HashMap和设置为空值,但尝试合并两者,如前面产生的同一阵列英寸
有一种类型null
可以用来覆盖任何Logger.它没有任何作用,因此适用于此用例:
monolog:
handlers:
main:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: debug
handler: ~
nested: ~
type: null
Run Code Online (Sandbox Code Playgroud)
另一个解决方案是不配置config.yml中的任何日志记录,而只是在特定环境配置中config_prod.yml
等等.
归档时间: |
|
查看次数: |
4034 次 |
最近记录: |