lager trace file的流程和实现分析

tracing是跟踪的意思,在lager中指的是跟踪用户打印的日志,根据属性作日志消息的重定向,若是没有tracing,那么lager无法作到按模块打印日志。

调用 lager:trace_file("logs/trace.log", [{module, myModule}], error),代表 myModule 模块中的日志打印语句,级别在error之上的日志,都会被保存到文件trace.log中。

第一个参数是文件名;第二个参数是filter过滤器,能够包括自定义属性;第三个是拦截的日志级别。

内部,tracing 的实现利用了总体的监督树结构,每个trace file都对应一个lager_event处理器,都对应一个lager_event_watcher子进程

下面分析 lager:trace_file("logs/trace.log", [{vhost, "example.com"}], error) 调用的完整流程和实现细节

入口:trace_file(File, Filter, Level)

一、生成元组,{Filter, Level, {lager_file_backend, File}}
二、调用 lager_util:validate_trace 验证生成的元组,主要是验证filter,返回 {Filter, LevelMask, {lager_file_backend, File}},LevelMask是level的掩模
三、验证事件处理器{lager_file_backend,"logs/trace.log"}是否存在;lager_event区分事件处理器,特别是同一个回调模块的多个处理器,是经过{lager_file_backend, ID},ID使用文件名
四、若是不存在,则添加事件处理器
五、而且,添加 Trace={Filter, LevelMask, {lager_file_backend, File}} 到 ets 表 lager_config中;key 是 loglevel,value是 {MinLevel, [Trace|Traces]},MinLevel是全部事件处理器最小的日志级别的掩模
相关文章
相关标签/搜索