Skip to content

Commit b473cde

Browse files
committed
Merge pull request #6 from KronicDeth/pids
Inspect all field values that are pids
2 parents 8c16db8 + 2eb8ea7 commit b473cde

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

lib/logger_logstash_backend.ex

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,18 @@ defmodule LoggerLogstashBackend do
4343
socket: socket
4444
}
4545
) do
46-
md = Enum.into(Keyword.merge(md, metadata), %{})
47-
md = Map.put md, :pid, inspect(md.pid)
46+
fields = md
47+
|> Keyword.merge(metadata)
48+
|> Enum.into(%{})
49+
|> Map.put(:level, to_string(level))
50+
|> inspect_pids
51+
4852
ts = Timex.datetime(ts, :local)
4953
{:ok, json} = JSX.encode %{
5054
type: type,
5155
"@timestamp": Timex.format!(ts, "%FT%T%z", :strftime),
5256
message: to_string(msg),
53-
fields: Map.put(md, :level, to_string(level))
57+
fields: fields
5458
}
5559
:gen_udp.send socket, host, port, to_char_list(json)
5660
end
@@ -76,4 +80,15 @@ defmodule LoggerLogstashBackend do
7680
metadata: metadata
7781
}
7882
end
83+
84+
# inspects the argument only if it is a pid
85+
defp inspect_pid(pid) when is_pid(pid), do: inspect(pid)
86+
defp inspect_pid(other), do: other
87+
88+
# inspects the field values only if they are pids
89+
defp inspect_pids(fields) when is_map(fields) do
90+
Enum.into fields, %{}, fn {key, value} ->
91+
{key, inspect_pid(value)}
92+
end
93+
end
7994
end

test/logger_logstash_backend_test.exs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,29 @@ defmodule LoggerLogstashBackendTest do
6161
assert (now - ts) < 1000
6262
end
6363

64+
test "can log pids" do
65+
Logger.info "pid", [pid_key: self]
66+
json = get_log
67+
{:ok, data} = JSX.decode json
68+
assert data["type"] === "some_app"
69+
assert data["message"] === "pid"
70+
expected = %{
71+
"function" => "test can log pids/1",
72+
"level" => "info",
73+
"module" => "Elixir.LoggerLogstashBackendTest",
74+
"pid" => (inspect self),
75+
"pid_key" => inspect(self),
76+
"some_metadata" => "go here",
77+
"line" => 65
78+
}
79+
assert contains?(data["fields"], expected)
80+
{:ok, ts} = Timex.parse data["@timestamp"], "%FT%T%z", :strftime
81+
ts = Timex.to_unix ts
82+
83+
now = Timex.to_unix Timex.DateTime.local
84+
assert (now - ts) < 1000
85+
end
86+
6487
test "cant log when minor levels" do
6588
Logger.debug "hello world", [key1: "field1"]
6689
:nothing_received = get_log

0 commit comments

Comments
 (0)