lager代码解析
lager是目前唯一的三方log库,除了erlang自带的logger库,没有太多其他选择
1.lager_sup
动态启动一个gen_event(lager_event)
启动lager_handle_watcher_sup
2.当lager的配置中写了一条handle时,
先在lager_handle_watcher_sup中起一个子进程lager_handle_watcher
然后在这个子进程中add_sup_handle,在lager_event里添加一个handle
3.当有消息发送来时,分发到lager_event的各个handle中处理
4.lager_event分很多种类型:
lager_backend_throttle 消息流控(同步和异步切换)
{async_threshold, 20} 当超过20条日志待处理时使用同步,降低磁盘压力
{async_threshold_window, 5} 低于20-5条日志待处理使用异步,提高写日志速度
根据这两条配置来控制,自动启动
lager_file_backend 写入文件
根据配置handlers生成
lager_console_backend 打印在控制台
根据配置handlers生成
lager_manager_killer 消息流控(是否杀死)
{killer_hwm, 1000}, 当超过1000条日志待处理时,kill整个日志池,并在5000毫秒后重启
{killer_reinstall_after, 5000}
根据这两条配置来控制,自动启动
error_logger_lager_h 记录错误日志
注意,error_logger_lager_h不接收lager_event分发的消息,只有其他地方出错时才会发送消息到此。自动启动
浙公网安备 33010602011771号