2009-09-27 12 views
13

Ho un piccolo framework che registra alcune informazioni e esegue il debug dei messaggi utilizzando l'oggetto Logger incorporato in ruby. In fase di esecuzione, funziona alla grande. Al tempo di test unitario (usando rspec se è importante ...) vorrei riversare i messaggi registrati su una variabile di stringa in memoria. Qual è il modo più semplice per farlo?Ruby: invia i messaggi del logger a una variabile stringa?

Stavo considerando una patch scimmia che dovrebbe sostituire i metodi di informazioni ed eseguire il debug, in questo modo:


class Logger 
    def info msg 
    $logs = msg 
    super msg 
    end 
end 

c'è un modo migliore per andare circa l'invio i miei messaggi di log ad una variabile stringa?

risposta

29

Usa StringIO

require 'stringio' 
require 'logger' 

strio = StringIO.new 
l = Logger.new strio 
l.warn "whee, i am logging to a string!" 

puts strio.string 
+0

Basta togliere le parentesi ad avere uno stile rubyish. – khelll

+2

Parentesi rimosse. Personalmente, preferisco usare la parentesi, ma l'ho modificato per essere più coerente con lo stile di codifica usato nella domanda. – hrnt

+0

grazie, hrnt. questo è esattamente quello che stavo cercando! –

Problemi correlati