gpt4 book ai didi

symfony2 yaml : overwrite configuration

转载 作者:行者123 更新时间:2023-12-02 18:23:27 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com