README.md


<p align="center">
    <img height="100" width="100" src="http://i.imgur.com/qybqMMx.png">
</p>
<p align="center">
  Simple Module-Level Logging
</p>

# Slogger

[![Build Status](https://travis-ci.org/elbow-jason/slogger.svg?branch=master)](https://travis-ci.org/elbow-jason/slogger)

Slogger is a simple logger that allows flexible, and easily customizable, module-level control of logging.

## Usage

Simple:

```elixir
defmodule SimpleSlogger do
  use Slogger

  def add(a, b) when b |> is_number and a |> is_number do
    Slogger.debug("equation: #{a} + #{b} = x")
    sum = a + b
    Slogger.debug("result: x = #{sum}")
    sum
  end

end
```

With a logging level:

```elixir
  defmodule LeveledSlogger do
    use Slogger, level: :info

    def is_one?(1) do
      # you will not see this debug log entry
      Slogger.debug("it was one")
      true
    end
    def is_one?(_) do
      # you will see this error log entry
      Slogger.error("WOOP WOOP WOOP ALARM. NOT ONE.")
      false
    end

  end
```

With a custom handler:

```elixir
  defmodule RobotHandler do
    @behaviour Slogger.LogHandler

    def log(entry, level) do
      IO.puts "Robot says, in [#{level}] voice, \"" <> "#{entry}" <> "\""
    end

    def debug(entry), do: log(entry, :debug)
    def info(entry), do: log(entry, :info)
    def warn(entry), do: log(entry, :warn)
    def error(entry), do: log(entry, :error)
  end


  defmodule CustomHandlerSlogger do
    use Slogger, handler: RobotHandler

    def beep do
      Slogger.warn("BEEP")
    end

  end
```

Configure using the config.exs file:

```elixir
  # in config.exs
  use Mix.Config

  config :slogger, MySloggingModule,
    level: :error
```

```elixir

defmodule MySloggingModule do
  use Slogger

  def do_it do
    Slogger.debug("this won't log")
    Slogger.error("this will log")
  end

end

```

NOTE: the `config` in a `config.exs` file will overwrite other configuration options. This allows for maximal flexibility in your applications.

## Installation

If [available in Hex](https://hex.pm/docs/publish), the package can be installed as:

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

    ```elixir
    def deps do
      [{:slogger, "~> 0.1.0"}]
    end
    ```

  2. Ensure `slogger` is started before your application:

    ```elixir
    def application do
      [applications: [:slogger]]
    end
    ```

## TODOS

 - [ ] Add more documentation