Handlers are implemented as environments. Within a logger a handler is
identified by its name and all handlers define at least the
three variables:
- level
all records at level lower than this are skipped.
- formatter
a function getting a record and returning a string
action(msg, handler)
a function accepting two parameters: a
formatted log record and the handler itself. making the handler a
parameter of the action allows us to have reusable action functions.
Being an environment, a handler may define as many variables as you
think you need. keep in mind the handler is passed to the action
function, which can check for existence and can use all variables that
the handler defines.