Packages

An Elixir Log Wrapper allows Maps and Strings to be passed to the Elixir Logger, along with that it will ouput to JSON.

Current section

Files

Jump to
stump lib stump.ex
Raw

lib/stump.ex

defmodule Stump do
@moduledoc """
Stump allows for Maps and Strings to be passed into the Elixir Logger and return logs in the JSON format.
"""
@moduledoc since: "1.0.0"
@doc """
The `log` method formats your given error message whether it be a Map or a String then passes it to Elixirs own Logger.
Usage for the module is as follows:
```
Stump.log(:level, message)
```
The level can be any of four `:debug/:info/:warn/:error`
Message can be either a `String` or `Map`
```
Stump.log(:error, 'Error Logged')
{'message':'Error Logged','level':'error','datetime':'2019-03-06T12:21:52.661587Z'}
```
"""
import Logger, only: [log: 2]
def log(level, data) when level in [:error, :warn, :info] do
Logger.log(level, format(level, data))
end
defp format(level, data) when data == nil or data == "" do
format(level, "Event Logger received log level, but no error message was provided")
end
defp format(level, data) when is_map(data) do
data
|> Map.merge(%{datetime: time(), level: to_string(level)})
|> encode()
end
defp format(level, data) when is_bitstring(data) or is_binary(data) do
%{message: data, datetime: time(), level: to_string(level)}
|> encode()
end
defp encode(map) do
case Jason.encode(map) do
{:ok, value} -> value
{:error, encode_error} ->
encode(%{encoding_error_message: "There was an error encoding your log message: #{encode_error.message}", datetime: time()})
end
end
@doc false
def time() do
Application.get_env(:stump, :time_api).utc_now()
end
end