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是全部事件處理器最小的日誌級別的掩模
相關文章
相關標籤/搜索