README.md

# ExKafkaLogger

`ExKafkaLogger` is a Elixir library that works using [Poison](https://github.com/devinus/poison "Poison Library Github"), [KafkaEx](https://github.com/kafkaex/kafka_ex "KafkaEx library Github") and [Plug](https://github.com/elixir-lang/plug "Elixir Plug library Github") to log data, parse to JSON and send it to Kafka.

This library automatically gets data from the default Elixir `Logger` and from
every request/response from your project. This data (and any data you might
want to send) is then parsed and sent to Kafka with a specified topic.

Documentation is avaiable online at [https://hexdocs.pm/ex_kafka_logger](https://hexdocs.pm/ex_kafka_logger).


## Installation

The package can be installed by adding `ex_kafka_logger` to your list of
dependencies in `mix.exs`:

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

After installing the library you will need to run the following command
```bash
$ mix deps.get
```

Then you will also need to follow the subsequent configuration steps.

### Configuration in 3 steps

#### Step 1

Add the ExKafkaLogger Plug on your Phoenix `endpoint.ex` file just above `plug YourApp.Router`

It should looks like:

```elixir
# ...

  plug Plug.Session,
    store: :cookie,
    key: "_my_app_key",
    signing_salt: "SECRET_SALT"

  plug ExKafkaLogger.Plug
  plug MyApp.Router
end
```

#### Step 2

Use `Plug.ErrorHandler` and create a `handle_error` function in the end of your `router.ex` file to catch the
 errors without let Phoenix send the default errors response, like the example below.

```elixir
use YourApp.Web, :router
use Plug.ErrorHandler

# ... your code ...

defp handle_errors(conn, _) do
  response = ExKafkaLogger.HttpError.template(conn.status)
  json(conn, response)
end
```

#### Step 3

Configure your application to make the Elixir `Logger` to use `ExKafkaLogger` as
one of your backend and let `ExKafkaLogger` knows how to connect in your Kafka
instance.

In your `config/ENV.exs` file add the lines like the example below.

```elixir
config :logger, backends: [:console, ExKafkaLogger]

config :ex_kafka_logger,
  kafka_topic: "your_logging_topic",
  service_name: "your_app_name"

 config :kafka_ex,
  brokers: [
    {"127.0.0.1", 9092},
  ],
  consumer_group: "consumer-group",
  disable_default_worker: false,
  sync_timeout: 3000,
  max_restarts: 10,
  max_seconds: 60,
  kafka_version: "0.9.0"
```

## Example Application

[Here](https://github.com/goalves/phoenixLoggedApp) is an example of how to use
this library to log a simple Phoenix Application.