Current section

5 Versions

Jump to

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 ]