2010-04-05 2 views
8

Desidero modificare il livello di registrazione di un'applicazione (ruby).Configurazione logger ruby ​​configurabile: Logger.new(). Level = variable

Ebbene, l'IRB non era felice con quello e ha gettato "NameError: nome sbagliato costante Logger :: WARN" in faccia. Ugh! Sono stato insultato.

Potrei farlo in un caso/quando per risolvere questo, o log.level = 1, ma ci deve essere un modo più elegante!

Qualcuno ha qualche idea?

-Daniel

risposta

15

Perché non basta usare la costante letterale nel vostro config hash?

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

Allora non c'è bisogno di scherzare con const_get o qualcosa di simile; puoi semplicemente fare log.level = config[:level].

Se deve assolutamente essere una stringa, è possibile eliminare il prefisso dello spazio dei nomi e chiamare const_get sul modulo Logger:

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

Se davvero deve essere la stringa qualificato, si potrebbe prova a usare this blog's qualified_const_get method (che non è un built-in!).

+3

La costante non può essere memorizzata nella config, perché la configurazione è caricata da un file yaml, ma Logger.const_get 'WARN' funziona alla grande per me! – Daniel