Skip to content

Commit 6559ac0

Browse files
committed
Improve logs
1 parent 7d09146 commit 6559ac0

2 files changed

Lines changed: 104 additions & 35 deletions

File tree

  • lib/remote_persistent_term/fetcher
  • test/remote_persistent_term/fetcher

lib/remote_persistent_term/fetcher/s3.ex

Lines changed: 57 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,10 @@ defmodule RemotePersistentTerm.Fetcher.S3 do
6868
with {:ok, versions} <- list_object_versions(state),
6969
{:ok, %{etag: etag, version_id: version}} <- find_latest(versions) do
7070
Logger.info(
71-
"found latest version of s3://#{state.bucket}/#{state.key}: #{etag} with version: #{version}"
71+
bucket: state.bucket,
72+
key: state.key,
73+
version: version,
74+
message: "Found latest version of object"
7275
)
7376

7477
{:ok, etag}
@@ -80,17 +83,32 @@ defmodule RemotePersistentTerm.Fetcher.S3 do
8083
{:error, "could not find s3://#{state.bucket}/#{state.key}"}
8184

8285
{:error, reason} ->
83-
Logger.error("#{__MODULE__} - s3://#{state.bucket}/#{state.key} - unknown error: #{inspect(reason)}")
86+
Logger.error(%{
87+
bucket: state.bucket,
88+
key: state.key,
89+
reason: inspect(reason),
90+
message: "Failed to get current version of object - unknown reason"
91+
})
92+
8493
{:error, "Unknown error"}
8594
end
8695
end
8796

8897
@impl true
8998
def download(state) do
90-
Logger.info("downloading s3://#{state.bucket}/#{state.key}...")
99+
Logger.info(
100+
bucket: state.bucket,
101+
key: state.key,
102+
message: "Downloading object from S3"
103+
)
91104

92105
with {:ok, %{body: body}} <- get_object(state) do
93-
Logger.debug("downloaded s3://#{state.bucket}/#{state.key}!")
106+
Logger.debug(
107+
bucket: state.bucket,
108+
key: state.key,
109+
message: "Downloaded object from S3"
110+
)
111+
94112
{:ok, body}
95113
else
96114
{:error, reason} ->
@@ -134,29 +152,53 @@ defmodule RemotePersistentTerm.Fetcher.S3 do
134152
defp aws_client_request(op, %{region: region, failover_regions: nil}),
135153
do: client().request(op, region: region)
136154

137-
defp aws_client_request(op, %{region: region, bucket: bucket, key: key, failover_regions: failover_regions})
155+
defp aws_client_request(
156+
op,
157+
%{
158+
region: region,
159+
bucket: bucket,
160+
key: key,
161+
failover_regions: failover_regions
162+
} = state
163+
)
138164
when is_list(failover_regions) do
139165
with {:error, reason} <- client().request(op, region: region) do
140-
Logger.error(
141-
"s3://#{bucket}/#{key} - Failed to fetch from primary region #{region}: #{inspect(reason)}, will try failover regions"
142-
)
143-
144-
try_failover_regions(op, failover_regions, bucket, key)
166+
Logger.error(%{
167+
bucket: bucket,
168+
key: key,
169+
region: region,
170+
reason: inspect(reason),
171+
message: "Failed to fetch from primary region, attempting failover regions"
172+
})
173+
174+
try_failover_regions(op, failover_regions, state)
145175
end
146176
end
147177

148-
defp try_failover_regions(_op, [], _bucket, _key), do: {:error, "All regions failed"}
178+
defp try_failover_regions(_op, [], _state), do: {:error, "All regions failed"}
149179

150-
defp try_failover_regions(op, [region | remaining_regions], bucket, key) do
151-
Logger.info("s3://#{bucket}/#{key} - Trying failover region: #{region}")
180+
defp try_failover_regions(op, [region | remaining_regions], state) do
181+
Logger.info(%{
182+
bucket: state.bucket,
183+
key: state.key,
184+
region: region,
185+
message: "Trying failover region"
186+
})
152187

153188
case client().request(op, region: region) do
154189
{:ok, result} ->
155190
{:ok, result}
156191

157192
{:error, reason} ->
158-
Logger.error("s3://#{bucket}/#{key} - Failed to fetch from failover region #{region}: #{inspect(reason)}")
159-
try_failover_regions(op, remaining_regions, bucket, key)
193+
Logger.error(%{
194+
bucket: state.bucket,
195+
key: state.key,
196+
region: region,
197+
reason: inspect(reason),
198+
message: "Failed to fetch from failover region"
199+
})
200+
201+
try_failover_regions(op, remaining_regions, state)
160202
end
161203
end
162204

test/remote_persistent_term/fetcher/s3_test.exs

Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,16 @@ defmodule RemotePersistentTerm.Fetcher.S3Test do
1616
{:error, :unknown_error}
1717
end)
1818

19-
assert capture_log(fn ->
20-
assert {:error, "Unknown error"} = S3.current_version(%S3{bucket: "bucket", key: "key"})
21-
end) =~
22-
"Elixir.RemotePersistentTerm.Fetcher.S3 - s3://bucket/key - unknown error: :unknown_error"
19+
log =
20+
capture_log(fn ->
21+
assert {:error, "Unknown error"} =
22+
S3.current_version(%S3{bucket: "bucket", key: "key"})
23+
end)
24+
25+
assert log =~ "bucket: \"bucket\""
26+
assert log =~ "key: \"key\""
27+
assert log =~ "reason: \":unknown_error\""
28+
assert log =~ "Failed to get current version of object - unknown reason"
2329
end
2430

2531
describe "init/1" do
@@ -67,9 +73,13 @@ defmodule RemotePersistentTerm.Fetcher.S3Test do
6773
assert {:ok, "current-etag"} = result
6874
end)
6975

70-
assert log =~ "s3://#{@bucket}/#{@key} - Failed to fetch from primary region #{@region}"
71-
assert log =~ "will try failover regions"
72-
assert log =~ "s3://#{@bucket}/#{@key} - Trying failover region: failover-region-1"
76+
assert log =~ "bucket: \"#{@bucket}\""
77+
assert log =~ "key: \"#{@key}\""
78+
assert log =~ "region: \"#{@region}\""
79+
assert log =~ "Failed to fetch from primary region, attempting failover regions"
80+
assert log =~ "region: \"failover-region-1\""
81+
assert log =~ "Trying failover region"
82+
assert log =~ "Found latest version of object with version: #{@version}"
7383
end
7484

7585
test "download/1 tries first failover region when primary region fails" do
@@ -97,9 +107,14 @@ defmodule RemotePersistentTerm.Fetcher.S3Test do
97107
assert {:ok, "content from failover region"} = result
98108
end)
99109

100-
assert log =~ "s3://#{@bucket}/#{@key} - Failed to fetch from primary region #{@region}"
101-
assert log =~ "will try failover regions"
102-
assert log =~ "s3://#{@bucket}/#{@key} - Trying failover region: failover-region-1"
110+
assert log =~ "bucket: \"#{@bucket}\""
111+
assert log =~ "key: \"#{@key}\""
112+
assert log =~ "Downloading object from S3"
113+
assert log =~ "region: \"#{@region}\""
114+
assert log =~ "Failed to fetch from primary region, attempting failover regions"
115+
assert log =~ "region: \"failover-region-1\""
116+
assert log =~ "Trying failover region"
117+
assert log =~ "Downloaded object from S3"
103118
end
104119

105120
test "returns error when primary and all failover regions fail" do
@@ -131,12 +146,17 @@ defmodule RemotePersistentTerm.Fetcher.S3Test do
131146
assert message =~ "All regions failed"
132147
end)
133148

134-
assert log =~ "s3://#{@bucket}/#{@key} - Failed to fetch from primary region #{@region}"
135-
assert log =~ "will try failover regions"
136-
assert log =~ "s3://#{@bucket}/#{@key} - Trying failover region: failover-region-1"
137-
assert log =~ "s3://#{@bucket}/#{@key} - Failed to fetch from failover region failover-region-1"
138-
assert log =~ "s3://#{@bucket}/#{@key} - Trying failover region: failover-region-2"
139-
assert log =~ "s3://#{@bucket}/#{@key} - Failed to fetch from failover region failover-region-2"
149+
assert log =~ "bucket: \"#{@bucket}\""
150+
assert log =~ "key: \"#{@key}\""
151+
assert log =~ "Downloading object from S3"
152+
assert log =~ "region: \"#{@region}\""
153+
assert log =~ "Failed to fetch from primary region, attempting failover regions"
154+
assert log =~ "region: \"failover-region-1\""
155+
assert log =~ "Trying failover region"
156+
assert log =~ "reason: \"\\\"First failover region connection error\\\"\""
157+
assert log =~ "Failed to fetch from failover region"
158+
assert log =~ "region: \"failover-region-2\""
159+
assert log =~ "reason: \"\\\"Second failover region connection error\\\"\""
140160
end
141161

142162
test "tries second failover region when first failover region fails" do
@@ -167,10 +187,17 @@ defmodule RemotePersistentTerm.Fetcher.S3Test do
167187
assert {:ok, "content from second failover region"} = result
168188
end)
169189

170-
assert log =~ "s3://#{@bucket}/#{@key} - Failed to fetch from primary region #{@region}"
171-
assert log =~ "s3://#{@bucket}/#{@key} - Trying failover region: failover-region-1"
172-
assert log =~ "s3://#{@bucket}/#{@key} - Failed to fetch from failover region failover-region-1"
173-
assert log =~ "s3://#{@bucket}/#{@key} - Trying failover region: failover-region-2"
190+
assert log =~ "bucket: \"#{@bucket}\""
191+
assert log =~ "key: \"#{@key}\""
192+
assert log =~ "Downloading object from S3"
193+
assert log =~ "region: \"#{@region}\""
194+
assert log =~ "Failed to fetch from primary region, attempting failover regions"
195+
assert log =~ "region: \"failover-region-1\""
196+
assert log =~ "Trying failover region"
197+
assert log =~ "reason: \"\\\"First failover region connection error\\\"\""
198+
assert log =~ "Failed to fetch from failover region"
199+
assert log =~ "region: \"failover-region-2\""
200+
assert log =~ "Downloaded object from S3"
174201
end
175202
end
176203
end

0 commit comments

Comments
 (0)