如何在Elixir中的控制台输出中获取行号

Ksh*_*tal 4 elixir iex

我需要获取IO.puts或IO.inspect的行号或elixir控制台上出现的任何其他类型的输出以进行调试.这是否有内置功能?或者有没有其他简单的方法来实现相同的目标?

PS:IO.puts的行号,我的意思是在代码中写入IO.puts的行.

Pat*_*ity 6

您可能正在寻找__ENV__,这将使您可以访问当前文件和行(以及其他内容).你可以这样做:

Logger.debug("#{__ENV__.file}:#{__ENV__.line}: #{inspect some_value}")
Run Code Online (Sandbox Code Playgroud)

编辑:正如José在评论中建议的那样,更好的方法是使用记录器的元数据功能.此刻,你只能添加:module,:function:line键:

# config/config.exs

config :logger, :console, metadata: [:module, :function, :line]
Run Code Online (Sandbox Code Playgroud)

但是,我做了一个PR来添加:file密钥.它已经合并,应该与下一版本的Elixir一起发布.使用新版本,您可以做到

# config/config.exs

config :logger, :console, metadata: [:file, :line]
Run Code Online (Sandbox Code Playgroud)