Larch
It's a logging framework. Currently it's main use is to reservoir sample logs and forward them to Logtron. In the long term, it may replace Logtron. It can be used like this:
var Logtron = ; var Larch = ;var LogtronBackend = ;var ReservoirBackend = ; var clients = ...var logtronLogger = ; var logger = ;logger; logger;
Docs
Larch({ backends: Array })
Larch
is a constructor that takes a list of backends.
Generally you want to use the ReservoirBackend
larch.bootstrap()
Remember to call bootstrap()
on larch to start the reservoir.
ReservoirBackend(opts)
ReservoirBackend
takes a set of options including:
backend
; what to write to if we sample the log callstatsd
; where to emit stats.clusterStatsd
; where to emit cluster-wide latency stats.size
; The amount of records that can be logged per intervalflushInterval
; How often we should flush the reservoir
The reservoir will log (1000 / flushInterval
) * size
records per second.
This means by default it will log 2000
records per second.
willSample($level, $msg)
Using The top level Larch object, as well as each backend, has a method willSample
.
This method returns true
if any backend after this backend in the object tree
is interested in taking a log with level $level
. This can be used to avoid
allocating space for large meta objects, like so:
if larch larch;
This way, we can do less work when we have a lot of logs because we don't have to allocate the large meta object.
Regular log methods (.log
, .error
, etc) will first compute a sampling
decision. Log methods prefixed with an s
(.slog
, .serror
, etc) will use
a previously computed sampling decision. Calling an s
method without first
calling .willSample($level, $msg)
will throw.
Contributors
License
MIT.