yaml / symfony2:覆盖配置

时间:2012-04-27 09:37:41

标签: php symfony yaml monolog

我想在config_test.yml中覆盖config_dev.yml中的一些配置。所以,想象一下config_dev.yml中的以下部分:

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

在我的测试环境中,我根本不需要记录器。所以我试过

monolog: ~

没有效果。我也尝试过:

monolog:
    handlers:
        main: ~
        firephp: ~

再次没有任何影响。然后我测试了

monolog:
    handlers:
        main:
            type: ~
            path: ~
            level: ~
        firephp:
            type: ~
            level: ~

我得到一个ErrorException Couldn't find constant Monolog\Logger::。如果有人能指出一种方法来覆盖monolog设置,我将非常感激。谢谢!

3 个答案:

答案 0 :(得分:8)

最好将处理程序定义为空数组:

monolog:
    handlers: []

UPD1:有特殊类型的记录器:test和null,你可以使用它们:

monolog:
    handlers:
        test:
            type:  test
            level: debug

答案 1 :(得分:3)

如果您使用的是Symfony2标准版

你的config_dev.yml看起来像这样的monolog开箱即用:

# config_dev.yml
monolog:
  handlers:
    main:
      type: fingers_crossed
      action_level: error
      handler: nested
    nested:
      type: stream
      path: %kernel.logs_dir%/%kernel.environment%.log
      level: debug

正如您所看到的,这定义了处理程序mainnested仅使用nested,因为它由main引用。

config_dev.yml是从config_test.yml导入的 如果要覆盖测试环境的配置,则需要覆盖main中的config_test.yml处理程序:

# config_text.yml
monolog:
    handlers:
      main:
        type: test

这将阻止monolog创建日志文件。

答案 2 :(得分:1)

你试过了吗?

monolog:
    handlers: ~

应该有效(我认为)。 Look here 没有处理程序,monolog就不会加载。