symfony2 yaml : overwrite configuration

标签 symfony yaml

我无法让 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

config_staging.yml:

imports:
    - { resource: config_prod.yml }

monolog:
    handlers:
        main:
            type: stream
            path: %kernel.logs_dir%/%kernel.environment%.log
            level: debug
        nested: ~

从我的角度来看,嵌套记录器现在为空,主日志记录到给定文件。 真正发生的是他将每条消息记录两次!当我将其用于 config_staging.yml 时,也会发生同样的情况:

imports:
    - { resource: config_prod.yml }

monolog:
    handlers:
        main:
            type: stream
            path: %kernel.logs_dir%/%kernel.environment%.log
            level: debug
            handler: ~
        nested: ~

我找到了一个解决方法,将主处理程序的 action_level 设置为调试并保留其他所有内容,但我不喜欢这个解决方案。必须有一种方法可以覆盖配置内容,所以我只有主独白处理程序。

最佳答案

大约一年后,我现在了解了正在发生的事情以及如何预防它:

nested 处理程序填充了 config.yml 中的配置,并且在解析 config_staging.yml 时,yaml 组件不会覆盖整个 HashMap 并将值设置为 null 但尝试合并两者,从而产生与之前相同的数组。

有一种名为 null 的类型,可用于覆盖任何 Logger。它不执行任何操作,因此适合此用例:

monolog:
    handlers:
        main:
            type: stream
            path: %kernel.logs_dir%/%kernel.environment%.log
            level: debug
            handler: ~
        nested: ~
            type: null

另一个解决方案是不在 config.yml 中配置任何日志记录,而仅在特定环境配置中配置,例如 config_prod.yml 等。

关于symfony2 yaml : overwrite configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8616765/

相关文章:

php - Symfony2 - 如何将违规添加到表单而不是当前验证的字段

mysql - 如何在 Doctrine2 中获取与其他实体相关的 2 个实体

go - 如何在 Go 和 yaml 包的 API v3 中生成配置文件时对注释进行编码

yaml - 该区域不支持端点配置类型 EDGE

go - 解析其中包含 "---"的 yaml 文件

go - 如果使用 import func,如何在控制台中获取 value 属性?

php - 表单 Symfony 2.3 订阅

php - 在应用程序和聊天服务器(Symfony 和 Memcache)之间共享 session

Symfony 4 包工作

go - 有没有办法验证/解析其中包含 go-template 变量的 YAML 文件?