The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# http://stackoverflow.com/questions/5914088 and
# https://github.com/mschilli/log4perl/issues/7

use strict;
use Test::More;
use Log::Log4perl::Appender::TestBuffer;

plan tests => 6;

use Log::Log4perl qw(get_logger :easy);

# $Log::Log4perl::CHATTY_DESTROY_METHODS = 1;

my $conf = q(
log4perl.category.main             = WARN, LogBuffer
log4perl.category.Bar.Twix         = WARN, LogBuffer
log4perl.appender.LogBuffer  = Log::Log4perl::Appender::TestBuffer
log4perl.appender.LogBuffer.layout = \
Log::Log4perl::Layout::PatternLayout
log4perl.appender.LogBuffer.layout.ConversionPattern = %d %F{1} %L> %m %n
);

Log::Log4perl::init(\$conf);

my $buffer = Log::Log4perl::Appender::TestBuffer->by_name("LogBuffer");

my $logger = get_logger("Bar::Twix");

ok(exists $Log::Log4perl::Logger::LOGGERS_BY_NAME->{"Bar.Twix"}, 
   "logger exists");

Log::Log4perl->remove_logger( $logger );
undef $logger;

ok(!exists $Log::Log4perl::Logger::LOGGERS_BY_NAME->{"Bar.Twix"}, 
   "logger gone");

# now remove a stealth logger
$logger = get_logger("main");

ok(exists $Log::Log4perl::Logger::LOGGERS_BY_NAME->{"main"}, 
   "logger exists");

WARN "before";

Log::Log4perl->remove_logger( $logger );
undef $logger;

ok(!exists $Log::Log4perl::Logger::LOGGERS_BY_NAME->{"main"}, 
   "logger gone");

  # this should be a no-op now.
WARN "after";

like($buffer->buffer, qr/before/, "log message before logger removal present");
unlike($buffer->buffer, qr/after/, "log message after logger removal absent");