2011-12-23 17 views
6

Non riesco a ottenere la configurazione di symfony2 per sovrascrivere correttamente i valori da altri file di configurazione. Ecco il problema:symfony2 yaml: configurazione di sovrascrittura

Ho un nuovo ambiente "staging" in cui voglio utilizzare la maggior parte del materiale da config_prod.yml ma ho un altro livello di registrazione (voglio che sia come è in fase di sviluppo, semplicemente loggando tutto in un file). Qui ci sono le cose che uso config:

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

Dal mio punto di vista, il logger nidificato è ormai nullo e le principali ceppi al file specificato. Quello che succede veramente è che registra ogni messaggio due volte! Lo stesso accade quando uso questo per il config_staging.yml:

imports: 
    - { resource: config_prod.yml } 

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

ho trovato una soluzione alternativa, l'impostazione del action_level del gestore principale per eseguire il debug e lasciando tutto il resto come è, ma non mi piace questa soluzione . Ci deve essere un modo per sovrascrivere le cose di configurazione, quindi ho solo il gestore principale del monolog.

risposta

8

Praticamente un anno dopo che ora ho una comprensione di ciò che sta accadendo e come prevenirlo:

Il gestore nested è befilled con la configurazione dal config.yml e durante l'analisi del config_staging.yml, il componente yaml non sovrascrive l'intera hashmap e imposta il valore su null ma prova a unirli entrambi, risultando nella stessa matrice di prima.

C'è un tipo chiamato null che può essere utilizzato per sovrascrivere qualsiasi Logger. Non fa nulla ed è Perciò adatto per questo caso d'uso:

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

Un'altra soluzione potrebbe essere quella di non configurare alcun registrazione nel config.yml ma solo nelle specifiche configurazioni d'ambiente come config_prod.yml e così via.

1

Verificare di non avere alcun tasto ripetuto nel file di configurazione _staging - il secondo sovrascrive il primo, con il risultato netto che il primo viene ignorato.

+0

Ho controllato questo, senza chiavi pubblicizzate lì! – Sgoettschkes

0

Se si desidera modificare una raccolta rimuovendo un elemento, sarà necessario creare un file YAML intermedio (importando la base) impostando la raccolta su "null" e aggiungendo di nuovo tutti gli elementi di raccolta richiesti in un file che a sua volta importa il file YAML intermedio.

Non è possibile semplicemente sovrascrivere una raccolta. I nuovi elementi verranno aggiunti ma non è possibile rimuovere quelli esistenti tranne la soluzione descritta.

Problemi correlati