# UniLoggerBackend
A logger backend that allows to log to processes or functions.
## Installation
The package can be installed by adding `uni_logger_backend` to your list of
dependencies in `mix.exs`:
```elixir
def deps do
[
{:uni_logger_backend, "~> 0.1.0"}
]
end
```
## Using a process as target
First configure the logger to use the `UniLoggerBackend`
```elixir
# config/config.exs
config :logger, :backends, [{UniLoggerBackend, :console}]
config :logger, level: :info
```
Then configure the backend at runtime by giving a pid or process name as target:
```elixir
Logger.configure_backend({UniLoggerBackend, :console}, target: self())
```
Or provive the process name in the config:
```elixir
# config/config.exs
config :logger, :console, [target: :your_process]
```
Be aware that the process must handle two different kinds of messages. It
receives a tuple with the log level, the message, a timestamp and the metadata
in a tuple for all log messages and receives `:flush` if the logger should be
flushed.
## Using a function as target
Configure the logger to use the `UniLoggerBackend` and provide a function as
target. The function can either be given as a function reference or by passing
a tuple with a module and a function name.
```elixir
# config/config.exs
config :logger, :backends, [{UniLoggerBackend, :console}]
config :logger, :console, [level: :info, target: {YourMod, :your_fun}]
```
The function can also be given at runtime:
```elixir
Logger.configure_backend({UniLoggerBackend, :console}, target: some_fun/4)
```
Note that the arity of the function must be 4. It receives the log level, the
message, a timestamp and the metadata as arguments.
## Additional configuration
```elixir
# config/config.exs
config :logger, :console,
level: :info,
formatter: {YourMod, :your_fun},
meta: [any: "thing"]
```
* Log level can be set by adding the `level` option.
* A formatter to refine log messages before forwarding can be set with the
`formatter` option. Can be either a tuple with a module and a function name or
a function. The function must have arity 4 and receives the leve, the message,
the timestam and the metadata as arguments.
* Any additional metadata can be added with the `meta` option. The regular
metadata will be merged with the given metadata before sending or formatting.
## Documentation
Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at [https://hexdocs.pm/fun_logger_backend](https://hexdocs.pm/fun_logger_backend).