make it more clear that "with_logger" will not override package_logger
[p5sagit/Log-Contextual.git] / t / easy.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5
6 use lib 't/lib';
7 use My::Module;     # makes use of Log::Contextual::Easy::Default;
8 use My::Module2;    # makes use of Log::Contextual::Easy::Package;
9
10 # capture logging messages of My::Module, mapping "[...] xxx" to "...$sep"
11 sub logshort($$) {
12    my ($cap, $sep) = @_;
13    sub {
14       local $_ = shift;
15       s/^\[(.+)\] (xxx|"xxx")\n$/$1$sep/;
16       $$cap .= $_;
17      }
18 }
19
20 # capture warnings
21 my ($cap_warn, $cap_with, $cap_set);
22 local $SIG{__WARN__} = logshort \$cap_warn, '!';
23
24 {
25    My::Module::log();
26    My::Module2::log();
27    is($cap_warn, undef, 'no logging by default');
28 }
29
30 {
31    local $ENV{MY_MODULE_UPTO}  = 'info';
32    local $ENV{MY_MODULE2_UPTO} = 'info';
33    My::Module::log();
34    My::Module2::log();
35    is(
36       $cap_warn,
37       "info!warn!error!fatal!info!warn!error!fatal!",
38       'WarnLogger enabled via ENV'
39    );
40    $cap_warn = '';
41 }
42
43 {
44    use Log::Contextual::SimpleLogger;
45    use Log::Contextual qw(with_logger set_logger);
46
47    set_logger(
48       Log::Contextual::SimpleLogger->new({
49             levels  => [qw(info warn error)],
50             coderef => logshort \$cap_set,
51             '/'
52          }));
53
54    my $with_logger = Log::Contextual::SimpleLogger->new({
55       levels  => [qw(trace info fatal)],
56       coderef => logshort \$cap_with,
57       '|'
58    });
59
60    with_logger $with_logger => sub {
61       My::Module::log();
62       My::Module2::log();    # will not be overridden
63    };
64    is($cap_with, 'trace|info|fatal|', 'with_logger');
65
66    My::Module::log();
67    My::Module2::log();       # will not be overridden
68    is($cap_set, 'info/warn/error/', 'set_logger');
69
70    is($cap_warn, '', 'no warnings if with_logger or set_logger');
71 }
72
73 done_testing;
74