2011-12-23 11 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의 메인 로그 주어진 파일에. 실제로 일어나는 일은 그가 모든 메시지를 두 번 기록한다는 것입니다. 나는 config_staging.yml이를 사용할 때 마찬가지입니다 : 내가 디버그 메인 핸들러의 action_level을 설정하고 그대로 다른 모든 것을 떠나, 해결 방법을 찾았지만, 나는이 솔루션을 좋아하지 않아

imports: 
    - { resource: config_prod.yml } 

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

. 구성 항목을 덮어 쓸 수있는 방법이 있어야 기본 메노 로그 처리기 만 사용할 수 있습니다.

답변

8

지금의 이해가 1 년 후 꽤 많은 일이 어떻게 그것을 방지하기 위해 무엇을 :

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 구성 파일에 반복되는 키가 없는지 확인하십시오. 두 번째 키는 첫 번째 키를 무시하고 첫 번째 키는 무시됩니다.

+0

이 항목을 확인했는데 거기에 공개 키가 없습니다! – Sgoettschkes

0

요소를 제거하여 컬렉션을 변경하려면 컬렉션을 "null"로 설정하는 중간 YAML 파일을 만들고 (기본 가져 오기) 필요한 모든 컬렉션 요소를 파일에 다시 추가해야합니다 중간 YAML 파일을 가져옵니다.

단순히 컬렉션을 덮어 쓸 수 없습니다. 새로운 요소가 추가되지만 설명한 해결 방법을 제외하고는 기존 요소를 제거 할 수 없습니다.