简介
Lager的trace功能十分强大,在生产环境中,我们需要使用日志来配合定位问题,而如果只是单纯的使用日志等级来控制,在日志量非常大的时候可能会有性能负担,同时日志文件也难以查找,使用trace可以清晰的筛选我们想要的日志,且不影响其他日志逻辑
日志重定向
Lager支持简单的根据日志的属性来将日志内容进行重定向,每条Lager生成的日志都带了pid, module, function ,line
,除此之外,也可以在生成日志的时候进行扩展
lager:warning([{request, RequestID},{vhost, Vhost}], "Permission denied to ~s", [User])
第一个字段填入tupleList可以给日志消息增加额外属性,可供后续Trace的时候进行筛选
如果使用pid进行筛选的时候,pid字段使用字符串进行表述
lager:trace_console([{pid, "<0.410.0>"}])
加入属性后就可以根据属性进行筛选跟踪
lager:trace_file("logs/example.com.error", [{vhost, "example.com"}], error)
- Trace调用的三参,也就是日志等级,是可选参数,如果没有填充,默认为debug等级
- Trace本身和原生的日志逻辑没有直接关系,你可以在日志等级是error的情况下,trace一条debug的日志,第一个参数是日志重定向的文件,第二个参数是筛选消息的条件,第三个为日志等级
- Trace消息并不会影响原本的日志打印,不会因为Trace少掉日志消息或者增加了日志
除了通过调用双参日志接口给日志增加属性外,还可以在进程内调用lager:md/1
存储属性,所有该进程生成的日志都会携带md设定的属性,这在你有多个工作进程的时候会非常有用,日志进行运行的代码相同,但是你可以通过设定工作进程的属性将用户id写到日志属性中,之后就可以使用用户id对日志进行重定向,这在生产环境下将会非常有用
lager:md/1
每次调用都会覆盖之前的内容,并且不提供置空函数,因此最好不要让属性太过复杂,或者自己在进程逻辑中进行管理,md的参数是键值是atom的TupleList
lager:md([{zone, forbidden}])
同样可以在命令行中进行日志跟踪
lager:trace_console([{request, 117}])
如果需要限定日志等级,可以加入二参表示要跟踪的日志等级
要注意的是debug
这种日志