2013-07-08 2 views
9

Я использую Rails.logger.debug для переменных печати для целей отладки. Проблема заключается в том, что он печатает хэши в формате невозможного для чтения (не может отличить ключи от значений). Например, добавить следующие строки в моей базе кодаКак сделать Rails.logger.debug print hash более читаемым

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

Затем я запускаю мой рельсы приложение и тип

tail -f log/development.log 

Но когда my_hash распечатана, это выглядит как

bbaboonaalligator 

Ключ и значения сглаживаются, что делает невозможным синтаксический анализ. Вы, ребята, знаете, что я должен сделать, чтобы исправить это?

ответ

15

Ничего, я нашел ответ на свой вопрос. Мне нужно использовать

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

Затем он выглядит как

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

Это даже легче читать, когда вы используете to_yaml например:

logger.debug my_hash.to_yaml

Что легко читать формат по нескольким линиям. Метод inspect просто извергает строку.

+0

Большой наконечник здесь! 'to_yaml' также создает строку, но она отформатирована с' \ n' и отступом, поэтому гораздо проще сбрасывать большой или вложенный хэш ... Если вы пытаетесь записать хэш-подобный объект (скажем, 'params') вы можете в итоге «ivars» засорить интересующие вас данные. Сначала переведите его в обычный хеш, а затем превратите в yaml: 'logger.debug params.to_hash.to_yaml' – alxndr

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

Затем он выглядит как

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

не нужен инспектировать

0

Существует другой способ сделать это. В модуле pp.rb имеется рубиновый блок, который представляет собой Pretty-printer для объектов Ruby.

, не очень-печатной продукции с помощью р:

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

довольно-печатной продукции с помощью ПП:

#<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> 
Смежные вопросы