The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::Fatal;
use Test::More;

use Log::Dispatchouli::Global '$Logger' => { init => {
  ident   => 't/global.t',
  log_pid => 0,
  to_self => 1,
}};

{
  package Alpha;
  use Log::Dispatchouli::Global '$Logger';

  sub call_bravo {
    my ($self, $n) = @_;
    
    local $Logger = $Logger->proxy({ proxy_prefix => "$n: " });

    $Logger->log("inside call_bravo");

    Bravo->endpoint;
  }
}

{
  package Bravo;
  use Log::Dispatchouli::Global '$Logger' => { -as => 'L' };

  sub endpoint {
    my ($self, $n) = @_;
    
    $L->log("inside Bravo::endpoint");
  }
}

isa_ok($Logger, 'Log::Dispatchouli', 'imported $Logger');

$Logger->log("first");

Alpha->call_bravo(123);

$Logger->log("last");

my $events = $Logger->events;

is($events->[0]->{message}, 'first', '1st log');
is($events->[1]->{message}, '123: inside call_bravo', '2nd log');
is($events->[2]->{message}, '123: inside Bravo::endpoint', '3rd log');
is($events->[3]->{message}, 'last', '4th log');

done_testing;