Skip to content

rbkmoney/scoper

Repository files navigation

scoper

Log metadata scoping Erlang library.

About

From Urban Dictionary:

Scoper - another word for spastic. Came into use when the Spastic's Society changed it's name to Scope.

You Scoper!
You're such a Scoper!
Scoooper!

Usage

  • Scope log metadata along the process call stack, wrapping functions in scoper:scope/2,3. Scope name should be an atom, metadata is a map with atom keys. The types:

    -type key()   :: atom().
    -type value() :: any().
    -type meta()  :: #{key() => value()}.
    -type scope() :: key().
  • Add/remove scope metadata via scoper:add_meta/1 and scoper:remove_meta/1

  • Use lager or just process dictionary (by default) as metadata storage.

  • Implement your own storage as scoper_storage behaviour. Metadata storage is configured via application environment variable storage, which should name the module implementing scoper_storage behaviour. E.g.:

    {scoper, [
        {storage, scoper_storage_lager}
    ]}.
  • Enjoy tailored scoper_woody_event_handler:

    %% woody client or server config
    event_handler => scoper_woody_event_handler,

    Scope names for woody client and server are: rpc.client and rpc.server.

Note, if using lager metadata storage or/and woody event handler make sure to properly setup corresponding applications in your app.src file, since they are optional for scoper and not configured as it's application dependencies.