1###########################################
2# Test Suite Log::Log4perl::NDC
3# Mike Schilli, 2002 (m@perlmeister.com)
4###########################################
5
6BEGIN { 
7    if($ENV{INTERNAL_DEBUG}) {
8        require Log::Log4perl::InternalDebug;
9        Log::Log4perl::InternalDebug->enable();
10    }
11}
12
13use warnings;
14use strict;
15
16use Test;
17
18use Log::Log4perl qw(get_logger);
19use Log::Log4perl::Level;
20use Log::Log4perl::Appender::TestBuffer;
21use Log::Log4perl::NDC;
22use Log::Log4perl::MDC;
23
24BEGIN { plan tests => 3 }
25
26# Have TestBuffer log the Log::Dispatch priority
27Log::Log4perl::Appender::TestBuffer->reset();
28
29my $conf = <<EOT;
30log4perl.logger   = ALL, BUF0
31log4perl.appender.BUF0           = Log::Log4perl::Appender::TestBuffer
32log4perl.appender.BUF0.layout    = Log::Log4perl::Layout::PatternLayout
33log4perl.appender.BUF0.layout.ConversionPattern = %m <%x>
34EOT
35
36Log::Log4perl::init(\$conf);
37
38my $app0 = Log::Log4perl::Appender::TestBuffer->by_name("BUF0");
39
40my $loga = get_logger("a");
41
42Log::Log4perl::NDC->push("first");
43$loga->debug("debug");
44
45    # Push more than MAX
46Log::Log4perl::NDC->push("second");
47Log::Log4perl::NDC->push("third");
48Log::Log4perl::NDC->push("fourth");
49Log::Log4perl::NDC->push("fifth");
50Log::Log4perl::NDC->push("sixth");
51$loga->info("info");
52
53    # Delete NDC stack
54Log::Log4perl::NDC->remove();
55$loga->warn("warn");
56
57Log::Log4perl::NDC->push("seventh");
58$loga->error("error");
59
60ok($app0->buffer(), 
61   "debug <first>info <first second third fourth sixth>warn <[undef]>error <seventh>");
62
63Log::Log4perl::Appender::TestBuffer->reset();
64
65Log::Log4perl::MDC->put("remote_host", "blah-host");
66Log::Log4perl::MDC->put("ip", "blah-ip");
67
68$conf = <<EOT;
69log4perl.logger   = ALL, BUF1
70log4perl.appender.BUF1           = Log::Log4perl::Appender::TestBuffer
71log4perl.appender.BUF1.layout    = Log::Log4perl::Layout::PatternLayout
72log4perl.appender.BUF1.layout.ConversionPattern = %X{remote_host}: %m %X{ip}%n
73EOT
74
75Log::Log4perl::init(\$conf);
76
77my $app1 = Log::Log4perl::Appender::TestBuffer->by_name("BUF1");
78
79my $logb = get_logger("b");
80
81$logb->debug("testmessage");
82
83ok($app1->buffer(), 
84   "blah-host: testmessage blah-ip\n");
85
86# Check what happens if %X is used with an undef value
87Log::Log4perl::Appender::TestBuffer->reset();
88
89$conf = <<EOT;
90log4perl.logger   = ALL, BUF1
91log4perl.appender.BUF1           = Log::Log4perl::Appender::TestBuffer
92log4perl.appender.BUF1.layout    = Log::Log4perl::Layout::PatternLayout
93log4perl.appender.BUF1.layout.ConversionPattern = %X{quack}: %m %X{ip}%n
94EOT
95
96Log::Log4perl::init(\$conf);
97
98$app1 = Log::Log4perl::Appender::TestBuffer->by_name("BUF1");
99
100$logb = get_logger("b");
101
102$logb->debug("testmessage");
103
104ok($app1->buffer(), 
105   "[undef]: testmessage blah-ip\n");
106