Skip to content

Commit d5f7143

Browse files
committed
Reconnect if accept socket is closed
1 parent cbd9303 commit d5f7143

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

lib/logger_logstash_backend.ex

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,16 @@ defmodule LoggerLogstashBackend do
6262
end
6363
end
6464

65+
def handle_info({:tcp_closed, socket}, state = %__MODULE__{host: host, port: port, socket: socket}) do
66+
with {:error, _} <- configure_socket(state, host, port) do
67+
{:ok, state}
68+
end
69+
end
70+
71+
def handle_info(_, state) do
72+
{:ok, state}
73+
end
74+
6575
@doc """
6676
Closes socket when the backend is removed
6777
"""

test/logger_logstash_backend/tcp_test.exs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ defmodule LoggerLogstashBackend.TCPTest do
4747
:ok = :gen_tcp.close listen_socket
4848
end
4949

50-
{:ok, context}
50+
full_context = context
51+
|> Map.put(:accept_socket, accept_socket)
52+
|> Map.put(:listen_socket, listen_socket)
53+
54+
{:ok, full_context}
5155
end
5256

5357
test "can log" do
@@ -62,7 +66,7 @@ defmodule LoggerLogstashBackend.TCPTest do
6266
assert fields["function"] == "test can log/1"
6367
assert fields["key1"] == "field1"
6468
assert fields["level"] == "info"
65-
assert fields["line"] == 54
69+
assert fields["line"] == 58
6670
assert fields["module"] == to_string(__MODULE__)
6771
assert fields["pid"] == inspect(self)
6872
assert fields["some_metadata"] == "go here"
@@ -86,7 +90,7 @@ defmodule LoggerLogstashBackend.TCPTest do
8690
assert fields["function"] == "test can log pids/1"
8791
assert fields["pid_key"] == inspect(self)
8892
assert fields["level"] == "info"
89-
assert fields["line"] == 78
93+
assert fields["line"] == 82
9094
assert fields["module"] == to_string(__MODULE__)
9195
assert fields["pid"] == inspect(self)
9296
assert fields["some_metadata"] == "go here"
@@ -103,6 +107,12 @@ defmodule LoggerLogstashBackend.TCPTest do
103107
{:error, :nothing_received} = get_log
104108
end
105109

110+
test "it reconnects if disconnected", %{accept_socket: accept_socket, listen_socket: listen_socket} do
111+
:ok = :gen_tcp.close accept_socket
112+
113+
assert {:ok, _} = :gen_tcp.accept(listen_socket, 1_000)
114+
end
115+
106116
defp get_log do
107117
receive do
108118
{:tcp, _socket, json} -> {:ok, json}

0 commit comments

Comments
 (0)