【问题标题】:elixir Logger for lists, tuples, etc用于列表、元组等的 elixir Logger
【发布时间】:2015-05-11 03:39:29
【问题描述】:

我可以使用 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 中记录除字符串以外的列表、元组和数据类型?

【问题讨论】:

    标签: logging elixir


    【解决方案1】:

    您最好的选择是使用Logger.info "Here is some thing: #{inspect thing}"。这样即使thing 没有实现String.Chars 协议,你仍然可以获得一些有用的东西。

    【讨论】:

    • 如果你想展示一个数据结构,那么inspect绝对是你要走的路。 to_string 受到设计的更多限制。 :)
    【解决方案2】:

    如果目标是临时将某些内容打印到控制台而不是显式“记录”它,您可以直接使用IO.inspect/2,而不是在Logger 参数中使用inspect/2

    IO.inspect(params)
    

    它默认打印漂亮,因为它返回输入,你可以用一个标签在现有链中管道它,这在调试时非常有用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-05
      • 2022-11-21
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多