README.md

# Toprox

[![Build Status](https://travis-ci.org/diyZX/toprox.svg?branch=master)](https://travis-ci.org/diyZX/toprox)
[![Hex version](https://img.shields.io/hexpm/v/toprox.svg "Hex version")](https://hex.pm/packages/toprox)
[![License](http://img.shields.io/:license-mit-blue.svg)](http://doge.mit-license.org)

A simple proxy for different Logger backends which allows to filter messages based on metadata.

## Installation

Add `toprox` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:toprox, "~> 0.1"}
  ]
end
```

## Configuration

Config would have an entry similar to this:

```elixir
config :logger, backends: [
  {Toprox, :graylog},
  {Toprox, :rotate_log},
  {Toprox, :warn_console},
  :console
]
  
config :logger, :graylog,
  level: :info,
  backend: {
    Logger.Backends.Gelf, [
      host: "graylog.example.com",
      port: 12201,
      application: "MyApplication",
      compression: :gzip,
      metadata: [:request_id, :function, :module, :file, :line]
    ]
  }

config :logger, :rotate_log,
  level: :info,
  backend: {
    Loggix, [
      path: "test.log",
      json_encoder: Poison,
      rotate: %{max_bytes: 1024, keep: 5},
      metadata: [:user_id, :request_id]
    ]
  }

config :logger, :warn_console,
  level: :warn,
  backend: {
    Toprox.Console, [
      format: ">>> $date $time [$level] $metadata$message\n",
      metadata: [:user_id]
    ]
  }

config :logger, :console,
  format: "$date [$level] $metadata$message\n",
  metadata: [:request_id]
```

If you want to use `toprox` for standard Console backend you should use Toprox.Console instead like in the sample above.

## Usage

Use `:topic` in Logger metadata to write message to appropriate log:

```elixir
Logger.info "Info", topic: :graylog
Logger.error "Error", topic: [:rotate_log, :warn_console]
```