Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ flowchart TD
def deps do
[
# The package only makes sense for tests!
{:logger_handler_kit, only: :test, "~> 0.3.0"}
{:logger_handler_kit, only: :test, "~> 0.4.0"}
]
end
```
Expand Down
29 changes: 22 additions & 7 deletions lib/logger_handler_kit/arrange.ex
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ defmodule LoggerHandlerKit.Arrange do
* `big_config_override` is a map that will be merged into _handler config_. But a different one,
the one of `:logger_handler.config()` type. This is also the place to put
`handle_otp_reports` and `handle_sasl_reports` options, they will be passed to the
translator.
translator. Finally, `share_ownership_with` option used by `ownership_filter/2` also belongs here.

### Return

Expand Down Expand Up @@ -128,7 +128,14 @@ defmodule LoggerHandlerKit.Arrange do
ref: ref
},
filters: [
ownership_filter: {&ownership_filter/2, %{handler_id: handler_id, test_pid: self()}},
ownership_filter:
{&ownership_filter/2,
%{
handler_id: handler_id,
test_pid: self(),
share_ownership_with:
Map.get(big_config_override, :share_ownership_with, [{:global, Mox.Server}])
}},
logger_translator:
{&Logger.Utils.translator/2,
%{
Expand Down Expand Up @@ -169,9 +176,14 @@ defmodule LoggerHandlerKit.Arrange do
ownership information across processes. However, in some cases the logging process is
completely detached from the originating process. In this case, ownership filter will
check `pid` key in metadata, and if _that_ pid has access to the handler, it will
allow it and also ask `Mox` to allow it, if present.
allow it and ask all ownership servers specified in `share_ownership_with` option to do the same.

By default, `share_ownership_with` only includes `Mox` server (`{:global, Mox.Server}`)
"""
def ownership_filter(log_event, %{handler_id: handler_id}) do
def ownership_filter(log_event, %{
handler_id: handler_id,
share_ownership_with: ownership_servers
}) do
callers = Process.get(:"$callers") || []

meta_pids =
Expand All @@ -193,9 +205,12 @@ defmodule LoggerHandlerKit.Arrange do
_ ->
case NimbleOwnership.fetch_owner(@ownership_server, meta_pids, handler_id) do
{:ok, owner_pid} ->
with server when not is_nil(server) <- GenServer.whereis({:global, Mox.Server}) do
for {key, _} <- NimbleOwnership.get_owned({:global, Mox.Server}, owner_pid, %{}) do
NimbleOwnership.allow({:global, Mox.Server}, owner_pid, self(), key)
for server <- ownership_servers do
with server when not is_nil(server) <-
GenServer.whereis(server) do
for {key, _} <- NimbleOwnership.get_owned(server, owner_pid, %{}) do
NimbleOwnership.allow(server, owner_pid, self(), key)
end
end
end

Expand Down
2 changes: 1 addition & 1 deletion mix.exs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
defmodule LoggerHandlerKit.MixProject do
use Mix.Project

@version "0.3.0"
@version "0.4.0"
@source_url "https://github.com/martosaur/logger_handler_kit"

def project do
Expand Down