【发布时间】:2018-03-08 22:49:31
【问题描述】:
为了保持日志文件的干净和可读性,我想根据它们的级别打印元数据...
例如:对于调试/警告/错误,我想打印元数据,例如 :file 和 :line
但是对于信息,我真的不需要这些信息... 是否可以按级别打印元数据?
按照元数据的添加方式好像应该可以,格式为:$metadata[$level]
【问题讨论】:
为了保持日志文件的干净和可读性,我想根据它们的级别打印元数据...
例如:对于调试/警告/错误,我想打印元数据,例如 :file 和 :line
但是对于信息,我真的不需要这些信息... 是否可以按级别打印元数据?
按照元数据的添加方式好像应该可以,格式为:$metadata[$level]
【问题讨论】:
无法通过配置实现($metadata[$level] 表示Logger.Formatter 会吐出元数据,后面是方括号中的级别。)
幸运的是,Logger.metadata/1 允许完全配置您的元数据。
另外,Logger.info/2 接受元数据作为第二个参数,因此您可以引入自己的宏来包装 Logger.info,提供您想要的任何元数据。
【讨论】:
我认为你可以实现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
判断level和metadata可以满足你的要求。您还可以在metadata 中找到行和文件,其中包含以下字段。
:application - 当前应用程序
:module - 当前模块
:function - 当前函数
:file - 当前文件
:line - 当前行
:pid - 当前进程ID
【讨论】: