Elixir Logger:根据级别的元数据

时间:2018-03-08 14:01:50

标签: logging elixir

为了保持日志文件的清洁和可读性,我想根据它们的级别打印元数据......

e.g。 :对于debug / warn / error我想打印metadatas,如:file和:line

然而,对于信息,我真的不需要那些信息...... 是否可以根据其级别打印元数据?

似乎应该可以根据以下格式添加元数据的方式:$metadata[$level]

2 个答案:

答案 0 :(得分:0)

通过配置无法实现($metadata[$level]意味着Logger.Formatter将吐出元数据,后跟方括号中的级别。)

幸运的是,Logger.metadata/1允许完全配置元数据。

此外,Logger.info/2接受元数据作为第二个参数,因此您可以引入自己的宏来包装Logger.info,提供您想要的任何元数据。

答案 1 :(得分:0)

我认为您可以实施your own logger format

defmodule MyConsoleLogger do
  def format(level, message, timestamp, metadata) do
    # Custom formatting logic...
  rescue
    _ -> "could not format: #{inspect {level, message, metadata}}"
  end
end

通过判断levelmetadata,它可以满足您的要求。您还可以在metadata中找到包含以下字段的行和文件。

  

:application - 当前的应用程序

     

:module - 当前模块

     

:function - 当前函数

     

:file - 当前文件

     

:line - 当前行

     

:pid - 当前进程ID