2013-07-08 6 views
9

Ich verwende Rails.logger.debug Druckvariablen für Debugging-Zwecke. Das Problem ist, dass Ausdrucke in einem nicht lesbaren Format gedruckt werden (Schlüssel können nicht von Werten unterschieden werden). Zum Beispiel, füge ich die folgenden Zeilen in meinem Code-BasisWie Rails.logger.debug Druck Hash besser lesbar machen

#code_base.rb 
my_hash = {'a' => 'alligator', 'b'=>'baboon'} 
Rails.logger.debug my_hash 

Dann starte ich meine Rails-Anwendung und Typ

tail -f log/development.log 

Aber wenn my_hash gedruckt wird, sieht es aus wie

bbaboonaalligator 

Der Schlüssel und die Werte sind zusammengedrückt, was es unmöglich macht, zu analysieren. Weißt du, was ich tun soll, um das zu beheben?

Antwort

15

Nevermind, ich fand die Antwort auf meine eigene Frage. Ich brauche dann

my_hash = {'a' => 'alligator', 'b'=>'baboon'} 
Rails.logger.debug "#{my_hash.inspect}" 

zu verwenden, es sieht aus wie

{"b"=>"baboon", "a"=>"aligator"} 
8

Es ist sogar einfacher, es zu lesen, wenn Sie to_yaml verwenden zB:

logger.debug my_hash.to_yaml

Welche ein leicht zu lesen ist Format über mehrere Zeilen. Die inspect Methode spuckt einfach eine Zeichenfolge aus.

+0

Groß hier Tipp! 'to_yaml' erzeugt auch eine Zeichenkette, aber sie ist mit' \ n' und Einrückung formatiert, so dass es viel einfacher ist, einen großen oder verschachtelten Hash zu überfliegen ... Wenn Sie versuchen, ein Hash-ähnliches Objekt (zB 'params') zu protokollieren, Sie können damit enden, dass 'ivars' die Daten, die Sie interessieren, verstopfen. Machen Sie zuerst einen normalen Hash und dann diesen zu yaml:' logger.debug params.to_hash.to_yaml' – alxndr

2
my_hash = {'a' => 'alligator', 'b'=>'baboon'} 
logger.debug "#{my_hash}" 

Dann sieht es aus wie

{"b"=>"baboon", "a"=>"aligator"} 

nicht

0

brauchen inspizieren Es gibt einen anderen Weg, dies zu tun. Es ist ein Ruby in Modul pp.rb eingebaut, das Pretty-Drucker für Ruby-Objekte ist.

nicht-recht-gedruckte Ausgabe von p:

#<PP:0x81fedf0 @genspace=#<Proc:0x81feda0>, @group_queue=#<PrettyPrint::GroupQueue:0x81fed3c @queue=[[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], []]>, @buffer=[], @newline="\n", @group_stack=[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], @buffer_width=0, @indent=0, @maxwidth=79, @output_width=2, @output=#<IO:0x8114ee4>> 

pretty-gedruckte Ausgabe von pp:

#<PP:0x81fedf0 
@buffer=[], 
@buffer_width=0, 
@genspace=#<Proc:0x81feda0>, 
@group_queue= 
    #<PrettyPrint::GroupQueue:0x81fed3c 
    @queue= 
    [[#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>], 
    []]>, 
@group_stack= 
    [#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>], 
@indent=0, 
@maxwidth=79, 
@newline="\n", 
@output=#<IO:0x8114ee4>, 
@output_width=2>