14

我正在使用 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

5 回答 5

18

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

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

然后,它看起来像

{"b"=>"baboon", "a"=>"aligator"}
于 2013-07-08T17:46:37.997 回答
13

使用to_yaml例如:

logger.debug my_hash.to_yaml

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

于 2015-02-11T16:37:43.217 回答
2
my_hash = {'a' => 'alligator', 'b'=>'baboon'}
logger.debug "#{my_hash}"

然后,它看起来像

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

不需要检查

于 2017-05-09T13:32:47.540 回答
1

还有另一种方法可以做到这一点。模块pp.rb中内置了一个 ruby ​​,它是 Ruby 对象的 Pretty-printer。

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>
于 2017-08-06T04:00:03.803 回答
0

对于更复杂的对象,即使使用 ActiveRecord,也可以使用JSON.pretty_generate

Rails.logger.debug JSON.pretty_generate(my_hash.as_json)
于 2021-11-03T17:26:48.867 回答