2010-04-05 3 views
8

응용 프로그램 (루비)의 로깅 수준을 변경하고 싶습니다.구성 가능한 루비 로거 설정 : Logger.new(). level = variable

음은 IRB는 행복하지 않았다 및 던졌다 : 내 얼굴에 "나가서 설명하자면 NameError 잘못된 상수 이름 로거 :: WARN". 아! 나는 모욕 당했다.

이 문제를 해결할 때 또는 log.level = 1을 할 때이 작업을 수행 할 수 있지만 좀 더 우아한 방법이 있어야합니다!

누구에게 아이디어가 있습니까?

다니엘

답변

15

왜 당신이 당신 config 해시 리터럴 상수를 사용하지 않는?

config = { :level => Logger::WARN } 

그런 다음 const_get 또는 그와 비슷한 것을 속일 필요는 없습니다. 당신은 단순히 log.level = config[:level] 할 수 있습니다. 그것은 절대적으로 문자열이어야합니다

, 네임 스페이스 접두사를 삭제하고 Logger 모듈에 const_get를 호출 할 수

irb(main):012:0> Logger.const_get 'WARN' 
=> 2 

정말 정말는 자격을 갖춘 문자열이어야한다 경우, 수도 this blog's qualified_const_get method (내장되어 있지 않음!)을 사용해보십시오.

+3

config가 yaml 파일에서로드 되었기 때문에 상수를 config에 저장할 수 없지만 Logger.const_get 'WARN'이 저에게 유용합니다! – Daniel