2013-07-08 10 views
9

Używam zmiennych drukowania Rails.logger.debug do celów debugowania. Problem polega na tym, że drukuje hashy w niemożliwym do odczytania formacie (nie odróżnia kluczy od wartości). Na przykład, należy dodać następujące linie do mojego kodu bazowegoJak ustawić mieszanie protokołu Rails.logger.debug bardziej czytelny

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

Potem uruchomić mój app szyn i typ

tail -f log/development.log 

ale kiedy my_hash zostanie wydrukowany, wygląda

bbaboonaalligator 

Klucz i wartości są zgniecione, co uniemożliwia parsowanie. Czy wiecie, co powinienem zrobić, żeby to naprawić?

Odpowiedz

15

Nieważne, znalazłem odpowiedź na moje własne pytanie. Muszę korzystać

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

Następnie wygląda

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

To jeszcze łatwiej ją przeczytać podczas korzystania to_yaml np

logger.debug my_hash.to_yaml

który jest łatwy do odczytania formatuj w wielu liniach. Metoda inspect po prostu wypluwa ciąg znaków.

+0

Świetna końcówka tutaj! 'to_yaml' również tworzy ciąg znaków, ale jest sformatowany z' \ n' i wcięciem, więc znacznie łatwiej jest przejrzeć duży lub zagnieżdżony hash ... Jeśli próbujesz zalogować obiekt typu hash-like (powiedzmy 'params'), możesz skończyć z '' ivars' zatykaniem danych, które cię interesują. Najpierw zamień je w normalny skrót, a następnie zamień na yaml: 'logger.debug params.to_hash.to_yaml' – alxndr

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

Następnie wygląda

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

nie trzeba skontrolować

0

Istnieje inny sposób to zrobić. W module pp.rb wbudowany jest rubin, który jest ładną drukarką dla obiektów Ruby.

nie-całkiem-wydruk przez p jest:

#<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>> 

dość wydrukowany Wyjście przez 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> 
Powiązane problemy