用于列表、元组等的长生不老药记录器
elixir Logger for lists, tuples, etc
我可以使用 elixir 记录器来检查字符串
> str = "string"
> Logger.info "Here is a #{str}"
[info] Here is a string
但是当我记录一个列表时,它看起来并不漂亮
> list = [1,2,3,4,5]
> Logger.info "Here is a list: #{list}"
[info] Here is a list: ^A^B^C^D^E^F
当我记录关键字列表时,出现错误
> kwl = [a: "apple", b: "banana"]
> Logger.info "Here is a keyword list: #{kwl}"
** (ArgumentError) argument error
(stdlib) :unicode.characters_to_binary([a: "apple", b: "banana"])
(elixir) lib/list.ex:555: List.to_string/1
你如何在 Elixir 中记录除字符串以外的列表、元组和数据类型?
您最好的选择是使用 Logger.info "Here is some thing: #{inspect thing}"
。这样即使 thing
没有实现 String.Chars
协议,你仍然可以得到一些有用的东西。
如果目标是临时将某些内容打印到控制台而不是显式 "logging",您可以直接在 Logger
参数中使用 IO.inspect/2
, instead of using inspect/2
。
IO.inspect(params)
默认情况下它会漂亮地打印,并且由于它 returns 支持输入,您可以使用标签将其通过管道传输到现有链中,这在调试时非常有用:
result =
numbers
|> IO.inspect(label: "Input list")
|> Enum.filter(& rem(&1, 3) == 0)
|> IO.inspect(label: "Filtered to multiples of 3")
|> Enum.map(& &1 * &1)
|> IO.inspect(label: "Numbers Squared")
|> Enum.sum()
我可以使用 elixir 记录器来检查字符串
> str = "string"
> Logger.info "Here is a #{str}"
[info] Here is a string
但是当我记录一个列表时,它看起来并不漂亮
> list = [1,2,3,4,5]
> Logger.info "Here is a list: #{list}"
[info] Here is a list: ^A^B^C^D^E^F
当我记录关键字列表时,出现错误
> kwl = [a: "apple", b: "banana"]
> Logger.info "Here is a keyword list: #{kwl}"
** (ArgumentError) argument error
(stdlib) :unicode.characters_to_binary([a: "apple", b: "banana"])
(elixir) lib/list.ex:555: List.to_string/1
你如何在 Elixir 中记录除字符串以外的列表、元组和数据类型?
您最好的选择是使用 Logger.info "Here is some thing: #{inspect thing}"
。这样即使 thing
没有实现 String.Chars
协议,你仍然可以得到一些有用的东西。
如果目标是临时将某些内容打印到控制台而不是显式 "logging",您可以直接在 Logger
参数中使用 IO.inspect/2
, instead of using inspect/2
。
IO.inspect(params)
默认情况下它会漂亮地打印,并且由于它 returns 支持输入,您可以使用标签将其通过管道传输到现有链中,这在调试时非常有用:
result =
numbers
|> IO.inspect(label: "Input list")
|> Enum.filter(& rem(&1, 3) == 0)
|> IO.inspect(label: "Filtered to multiples of 3")
|> Enum.map(& &1 * &1)
|> IO.inspect(label: "Numbers Squared")
|> Enum.sum()