Current section
5 Versions
Jump to
Current section
5 Versions
Compare versions
5
files changed
+71
additions
-10
deletions
| @@ -1,4 +1,3 @@ | |
| 1 | - # Used by "mix format" |
| 2 1 | [ |
| 3 | - inputs: ["mix.exs", "{config,lib,test}/**/*.{ex,exs}"] |
| 2 | + inputs: ["{mix,.formatter}.exs", "{lib,test}/**/*.{ex,exs}"] |
| 4 3 | ] |
| @@ -2,6 +2,12 @@ | |
| 2 2 | |
| 3 3 | ## [Unreleased] |
| 4 4 | |
| 5 | + ## 0.3.2 - 2022-06-04 |
| 6 | + |
| 7 | + ### Fixed |
| 8 | + |
| 9 | + - Add a newline when producing a formatting error message (#19 by @jbruggem) |
| 10 | + |
| 5 11 | ## 0.3.1 - 2020-09-09 |
| 6 12 | |
| 7 13 | ### Fixed |
| @@ -8,7 +8,7 @@ | |
| 8 8 | {<<"licenses">>,[<<"MIT">>]}. |
| 9 9 | {<<"links">>, |
| 10 10 | [{<<"Changelog">>, |
| 11 | - <<"https://github.com/elixir-metadata-logger/metadata_logger/blob/master/CHANGELOG.md">>}, |
| 11 | + <<"https://github.com/elixir-metadata-logger/metadata_logger/blob/main/CHANGELOG.md">>}, |
| 12 12 | {<<"GitHub">>, |
| 13 13 | <<"https://github.com/elixir-metadata-logger/metadata_logger">>}]}. |
| 14 14 | {<<"name">>,<<"metadata_logger">>}. |
| @@ -18,4 +18,4 @@ | |
| 18 18 | {<<"optional">>,false}, |
| 19 19 | {<<"repository">>,<<"hexpm">>}, |
| 20 20 | {<<"requirement">>,<<"~> 1.0">>}]]}. |
| 21 | - {<<"version">>,<<"0.3.1">>}. |
| 21 | + {<<"version">>,<<"0.3.2">>}. |
| @@ -41,6 +41,22 @@ defmodule MetadataLogger do | |
| 41 41 | "timestamp" => "2019-11-22T12:23:45.000678" |
| 42 42 | } |
| 43 43 | |
| 44 | + iex> MetadataLogger.format( |
| 45 | + ...> :info, |
| 46 | + ...> %{hello: :world}, |
| 47 | + ...> {{2019, 11, 22}, {12, 23, 45, 678}}, |
| 48 | + ...> function: "hello/1", |
| 49 | + ...> file: "/my/file.ex", |
| 50 | + ...> line: 11, |
| 51 | + ...> foo: :bar |
| 52 | + ...> ) |> Jason.decode!() |
| 53 | + %{ |
| 54 | + "level" => "info", |
| 55 | + "message" => %{"hello" => "world"}, |
| 56 | + "metadata" => %{"foo" => "bar"}, |
| 57 | + "timestamp" => "2019-11-22T12:23:45.000678" |
| 58 | + } |
| 59 | + |
| 44 60 | """ |
| 45 61 | @spec format(Logger.level(), Logger.message(), Logger.Formatter.time(), keyword) :: |
| 46 62 | IO.chardata() |
| @@ -55,6 +71,7 @@ defmodule MetadataLogger do | |
| 55 71 | ] |
| 56 72 | rescue |
| 57 73 | e -> |
| 74 | + [ |
| 58 75 | %{ |
| 59 76 | level: "error", |
| 60 77 | message: "could not format json message", |
| @@ -66,7 +83,9 @@ defmodule MetadataLogger do | |
| 66 83 | metadata: inspect(metadata) |
| 67 84 | } |
| 68 85 | } |
| 69 | - |> Jason.encode!() |
| 86 | + |> Jason.encode!(), |
| 87 | + "\n" |
| 88 | + ] |
| 70 89 | end |
| 71 90 | |
| 72 91 | @doc """ |
| @@ -112,8 +131,39 @@ defmodule MetadataLogger do | |
| 112 131 | timestamp: ~N[2019-11-22 12:23:45.000678] |
| 113 132 | } |
| 114 133 | |
| 134 | + iex> MetadataLogger.log_to_map( |
| 135 | + ...> :info, |
| 136 | + ...> %{hello: :world}, |
| 137 | + ...> {{2019, 11, 22}, {12, 23, 45, 678}}, |
| 138 | + ...> [] |
| 139 | + ...> ) |
| 140 | + %{ |
| 141 | + level: :info, |
| 142 | + message: %{hello: :world}, |
| 143 | + metadata: %{}, |
| 144 | + timestamp: ~N[2019-11-22 12:23:45.000678] |
| 145 | + } |
| 146 | + |
| 147 | + iex> MetadataLogger.log_to_map( |
| 148 | + ...> :info, |
| 149 | + ...> [foo: 1, foo: 2], |
| 150 | + ...> {{2019, 11, 22}, {12, 23, 45, 678}}, |
| 151 | + ...> [] |
| 152 | + ...> ) |
| 153 | + %{ |
| 154 | + level: :info, |
| 155 | + message: %{foo: 2}, |
| 156 | + metadata: %{}, |
| 157 | + timestamp: ~N[2019-11-22 12:23:45.000678] |
| 158 | + } |
| 159 | + |
| 115 160 | """ |
| 116 | - @spec log_to_map(Logger.level(), Logger.message(), Logger.Formatter.time(), keyword) :: |
| 161 | + @spec log_to_map( |
| 162 | + Logger.level(), |
| 163 | + Logger.message() | Logger.report(), |
| 164 | + Logger.Formatter.time(), |
| 165 | + keyword |
| 166 | + ) :: |
| 117 167 | map() |
| 118 168 | def log_to_map(level, message, ts, metadata) do |
| 119 169 | with m <- Enum.into(metadata, %{}), |
| @@ -146,9 +196,9 @@ defmodule MetadataLogger do | |
| 146 196 | |> put_val(:ancestors, nil_or_inspect_list(ancestors)) |
| 147 197 | |> put_val(:callers, nil_or_inspect_list(callers)) |
| 148 198 | end |
| 149 | - |> Map.put(:timestamp, transform_timestamp(ts)) |
| 150 199 | |> Map.put(:level, level) |
| 151 | - |> Map.put(:message, to_string(message)) |
| 200 | + |> Map.put(:message, transform_message(message)) |
| 201 | + |> Map.put(:timestamp, transform_timestamp(ts)) |
| 152 202 | end |
| 153 203 | |
| 154 204 | defp nil_or_inspect(nil), do: nil |
| @@ -160,6 +210,12 @@ defmodule MetadataLogger do | |
| 160 210 | defp put_val(map, _key, nil), do: map |
| 161 211 | defp put_val(map, key, val), do: Map.put(map, key, val) |
| 162 212 | |
| 213 | + defp transform_message(%_{} = m), do: to_string(m) |
| 214 | + defp transform_message(m) when is_map(m), do: m |
| 215 | + defp transform_message([{_k, _v} | _t] = m), do: Enum.into(m, %{}) |
| 216 | + defp transform_message(m) when is_list(m), do: IO.iodata_to_binary(m) |
| 217 | + defp transform_message(m), do: to_string(m) |
| 218 | + |
| 163 219 | defp transform_timestamp({{y, month, d}, {h, minutes, s, mil}}) do |
| 164 220 | {:ok, dt} = NaiveDateTime.new(y, month, d, h, minutes, s, mil) |
| 165 221 | dt |
| @@ -1,7 +1,7 @@ | |
| 1 1 | defmodule MetadataLogger.MixProject do |
| 2 2 | use Mix.Project |
| 3 3 | |
| 4 | - @version "0.3.1" |
| 4 | + @version "0.3.2" |
| 5 5 | |
| 6 6 | def project do |
| 7 7 | [ |
| @@ -40,7 +40,7 @@ defmodule MetadataLogger.MixProject do | |
| 40 40 | links: %{ |
| 41 41 | "GitHub" => "https://github.com/elixir-metadata-logger/metadata_logger", |
| 42 42 | "Changelog" => |
| 43 | - "https://github.com/elixir-metadata-logger/metadata_logger/blob/master/CHANGELOG.md" |
| 43 | + "https://github.com/elixir-metadata-logger/metadata_logger/blob/main/CHANGELOG.md" |
| 44 44 | }, |
| 45 45 | maintainers: ["Chulki Lee"] |
| 46 46 | ] |