1#!/usr/bin/perl
2##########################################################################
3# Check basic variable substitution.
4# Mike Schilli, 2003 (m@perlmeister.com)
5##########################################################################
6
7BEGIN { 
8    if($ENV{INTERNAL_DEBUG}) {
9        require Log::Log4perl::InternalDebug;
10        Log::Log4perl::InternalDebug->enable();
11    }
12}
13
14use warnings;
15use strict;
16
17use Test::More;
18BEGIN { plan tests => 8 }
19use Log::Log4perl qw(get_logger);
20
21########################################################
22# Wrong variable name
23########################################################
24my $conf = q(
25screen = Log::Log4perl::Appender::Screen
26log4perl.category = WARN, ScreenApp
27log4perl.appender.ScreenApp = ${screen1}
28log4perl.appender.ScreenApp.layout = \
29    Log::Log4perl::Layout::PatternLayout
30log4perl.appender.ScreenApp.layout.ConversionPattern = %d %F{1} %L> %m %n
31);
32
33eval { Log::Log4perl::init(\$conf) };
34
35like($@, qr/Undefined Variable 'screen1'/);
36
37########################################################
38# Replacing appender class name
39########################################################
40$conf = q(
41screen = Log::Log4perl::Appender::TestBuffer
42log4perl.category = WARN, BufferApp
43log4perl.appender.BufferApp = ${screen}
44log4perl.appender.BufferApp.layout = \
45    Log::Log4perl::Layout::PatternLayout
46log4perl.appender.BufferApp.layout.ConversionPattern = %d %F{1} %L> %m %n
47);
48
49Log::Log4perl::init(\$conf);
50my $logger = get_logger("");
51$logger->error("foobar");
52my $buffer = Log::Log4perl::Appender::TestBuffer->by_name("BufferApp");
53like($buffer->buffer, qr/foobar/);
54
55########################################################
56# Replacing appender class name
57########################################################
58$conf = q(
59    layout_class   = Log::Log4perl::Layout::PatternLayout
60    layout_pattern = %d %F{1} %L> %m %n
61    
62    log4perl.category.Bar.Twix = WARN, Logfile, Screen
63
64    log4perl.appender.Logfile  = Log::Log4perl::Appender::TestBuffer
65    log4perl.appender.Logfile.filename = test.log
66    log4perl.appender.Logfile.layout = ${layout_class}
67    log4perl.appender.Logfile.layout.ConversionPattern = ${layout_pattern}
68
69    log4perl.appender.Screen  = Log::Log4perl::Appender::TestBuffer
70    log4perl.appender.Screen.layout = ${layout_class}
71    log4perl.appender.Screen.layout.ConversionPattern = ${layout_pattern}
72);
73
74Log::Log4perl::init(\$conf);
75$logger = get_logger("Bar::Twix");
76$logger->error("foobar");
77
78$buffer = Log::Log4perl::Appender::TestBuffer->by_name("Logfile");
79like($buffer->buffer, qr/foobar/);
80$buffer = Log::Log4perl::Appender::TestBuffer->by_name("Screen");
81like($buffer->buffer, qr/foobar/);
82
83########################################################
84# Multi-Line variable
85########################################################
86$conf = q(
87    layout_class   = \
88Log::Log4perl::\
89Layout::PatternLayout
90    layout_pattern = %d %F{1} \
91%L> \
92%m \
93%n
94    log4perl.category.Bar.Twix = WARN, Logfile, Screen
95
96    log4perl.appender.Logfile  = Log::Log4perl::Appender::TestBuffer
97    log4perl.appender.Logfile.filename = test.log
98    log4perl.appender.Logfile.layout = ${layout_class}
99    log4perl.appender.Logfile.layout.ConversionPattern = ${layout_pattern}
100
101    log4perl.appender.Screen  = Log::Log4perl::Appender::TestBuffer
102    log4perl.appender.Screen.layout = ${layout_class}
103    log4perl.appender.Screen.layout.ConversionPattern = ${layout_pattern}
104);
105
106Log::Log4perl::init(\$conf);
107$logger = get_logger("Bar::Twix");
108$logger->error("foobar");
109
110$buffer = Log::Log4perl::Appender::TestBuffer->by_name("Logfile");
111like($buffer->buffer, qr/foobar/);
112$buffer = Log::Log4perl::Appender::TestBuffer->by_name("Screen");
113like($buffer->buffer, qr/foobar/);
114
115########################################################
116# Environment variable substitution
117########################################################
118$ENV{layout_class}   = "Log::Log4perl::Layout::PatternLayout";
119$ENV{layout_pattern} = "%d %F{1} %L> %m %n";
120
121$conf = q(
122    log4perl.category.Bar.Twix = WARN, Logfile, Screen
123
124    log4perl.appender.Logfile  = Log::Log4perl::Appender::TestBuffer
125    log4perl.appender.Logfile.filename = test.log
126    log4perl.appender.Logfile.layout = ${layout_class}
127    log4perl.appender.Logfile.layout.ConversionPattern = ${layout_pattern}
128
129    log4perl.appender.Screen  = Log::Log4perl::Appender::TestBuffer
130    log4perl.appender.Screen.layout = ${layout_class}
131    log4perl.appender.Screen.layout.ConversionPattern = ${layout_pattern}
132);
133
134Log::Log4perl::init(\$conf);
135$logger = get_logger("Bar::Twix");
136$logger->error("foobar");
137
138$buffer = Log::Log4perl::Appender::TestBuffer->by_name("Logfile");
139like($buffer->buffer, qr/foobar/);
140$buffer = Log::Log4perl::Appender::TestBuffer->by_name("Screen");
141like($buffer->buffer, qr/foobar/);
142