A logging handler that can transforms structured logs into opencensus distributed tracing spans
This library only works with logs that can be paired up with one that 'starts' and one that 'stops' a given event. For example, the following configuration:
[
{kernel, [
{logger, [
{handler, opencensus, tracelog,
#{open_close_pairs => [
% {key name, {open val, close val}}
{type, {command, event}},
{part, {request, response}},
{trace, {start, stop}}
],
name_keys => [what, span]
}
}
]},
{logger_level, info}
]},
...
].
This means that any log that has any of the keys/values below will work:
%% any log level works
?LOG_INFO(#{... type => command, ...}) % opens the span
?LOG_INFO(#{... type => event, ...}) % closes the span
?LOG_INFO(#{... part => request, ...}) % opens the span
?LOG_INFO(#{... part => response, ...}) % closes the span
?LOG_INFO(#{... trace => start, ...}) % opens the span
?LOG_INFO(#{... trace => stop, ...}) % closes the span
By default, only {trace, {start, stop}}
is configured. The list of trace types given is scanned in order, so the most frequently expected keys should be put first.
The name of the span will be defined by any of the name_keys
arguments, in the precedence given by the list. If no matching label fits, the handler defaults to using the calling function name defined by the mfa
meta value inserted by the logger
library. If no such label nor mfa
value is available, the name undefined
is used by the span.
This log handler does not output any log lines, it only forwards calls to opencensus. You still have to carry the opencensus trace context across processes of services yourself; this handler only makes it easier to reuse logs as spans to provide detailed tracing views.