如何使Rails.logger.debug打印哈希更具可读性

时间:2013-07-08 17:38:23

标签: ruby-on-rails debugging logging pretty-print

我正在使用Rails.logger.debug打印变量进行调试。问题是它以不可读的格式打印哈希(无法区分键和值)。例如,我将以下行添加到我的代码库

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

然后我启动我的rails应用程序并输入

  tail -f log/development.log 

但是当打印my_hash时,它看起来像

  bbaboonaalligator

密钥和值被压缩,无法解析。你们知道我应该怎么做才能解决这个问题吗?

4 个答案:

答案 0 :(得分:16)

没关系,我找到了自己问题的答案。我需要使用

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

然后,它看起来像

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

答案 1 :(得分:10)

使用to_yaml例如:

时,阅读它会更容易

logger.debug my_hash.to_yaml

这是一种易于阅读的多行格式。 inspect方法只是输出一个字符串。

答案 2 :(得分:2)

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

然后,它看起来像

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

不需要检查

答案 3 :(得分:0)

还有另一种方法可以做到这一点。模块pp.rb内置了一个ruby,它是Ruby对象的漂亮打印机。

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

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>