2011-12-23 13 views
6

symfony2の設定で他の設定ファイルの値を正しく上書きすることができません。symfony2 yaml:コンフィグを上書きする

私は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: ~ 

は、私の視点からは、ネストされたロガーは現在、nullで、メインログ指定されたファイルに追加します。 本当に起こるのは、彼がすべてのメッセージを2回記録するということです!私は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を設定しているとして、他のすべてを残して、私はこのソリューションを好きではありません。設定のものを上書きする方法がなければならないので、私はメインのモノログハンドラしか持っていません。

答えて

8

ほとんど一年後、私は今起こって、どのようにそれを防ぐために何を理解している:

nestedハンドラがconfig.ymlからの設定でbefilledされ、config_staging.ymlを解析する際に、YAMLコンポーネントが上書きされることはありませんハッシュマップ全体を返し、値をnullに設定しますが、両方をマージして、前と同じ配列になります。

nullと呼ばれるタイプがあり、これを使用してロガーを上書きすることができます。これは、このユースケースのために適切なその何もしませんし、次のとおりです。

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

別の解決策は、config.yml中だけようにconfig_prod.ymlなど、特定の環境のconfigsのいずれかのログを設定しないことであろう。

1

_staging設定ファイルに繰り返しキーがないことを確認します.2番目のキーは最初のキーを上書きし、1番目のキーは無視されます。

+0

私はこの1つを確認しましたが、そこに公開鍵はありません! – Sgoettschkes

0

要素を削除してコレクションを変更する場合は、中間YAMLファイルを作成し(ベースをインポートする)、コレクションを「null」に設定し、必要なすべてのコレクション要素をファイルに再追加する必要があります中間のYAMLファイルをインポートします。

コレクションを単純に上書きすることはできません。新しい要素が追加されますが、説明されている回避策以外の既存の要素は削除できません。

関連する問題