File: logger.t

package info (click to toggle)
libdancer2-perl 0.400001%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 2,580 kB
  • sloc: perl: 8,461; makefile: 9
file content (116 lines) | stat: -rw-r--r-- 2,779 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
use Test::More;
use strict;
use warnings;

BEGIN {

    # Freeze time at Tue, 15-Jun-2010 00:00:00 GMT
    *CORE::GLOBAL::time = sub { return 1276560000 }
}


my $_logs = [];

{

    package Dancer2::Logger::Test;
    use Moo;
    with 'Dancer2::Core::Role::Logger';

    sub log {
        my ( $self, $level, $message ) = @_;
        push @$_logs, $self->format_message( $level, $message );
    }
}

my $logger = Dancer2::Logger::Test->new( app_name => 'test' );

is $logger->log_level, 'debug';
$logger->debug("foo");

# Hard to make caller(6) work when we deal with the logger directly,
# so do not check for a specific filename.
like $_logs->[0], qr{debug \@2010-06-1\d \d\d:\d\d:00> foo in };

subtest 'log level and capture' => sub {
    use Dancer2::Logger::Capture;
    use Dancer2;

    # NOTE: this will read the config.yml under t/ that defines log level as info
    set logger => 'capture';

    warning "Danger!  Warning!";
    info "Tango, Foxtrot";
    debug "I like pie.";

    my $trap = dancer_app->engine('logger')->trapper;
    my $msg  = $trap->read;
    delete $msg->[0]{'formatted'};
    delete $msg->[1]{'formatted'};
    is_deeply $msg,
      [
        {
            level => "warning",
            message => "Danger!  Warning!",
        },
        {
            level => "info",
            message => "Tango, Foxtrot",
        },
      ];

    # each call to read cleans the trap
    is_deeply $trap->read, [];
};

subtest 'logger enging hooks' => sub {
    # before hook can change log level or message.
    hook 'engine.logger.before' => sub {
        my $logger = shift; # @_ = ( $level, @message_args )
        $_[0] = 'panic';    # eg. log all messages at the 'panic' level
    };

    my $str = "Thou shalt not pass";
    warning $str;
    my $trap = dancer_app->engine('logger')->trapper;
    my $msg  = $trap->read;
    delete $msg->[0]{'formatted'};
    is_deeply $msg,
      [
        {
            level => "panic",
            message => $str,
        },
    ];
};

subtest 'logger file' => sub {
    use Dancer2;
    use File::Temp qw/tempdir/;

    my $dir = tempdir( CLEANUP => 1 );

    set engines => {
        logger => {
            File => {
                log_dir   => $dir,
                file_name => 'test',
            }
        }
    };
    # XXX this sucks, we need to set the engine *before* the logger
    # - Franck, 2013/08/03
    set logger  => 'file';

    warning "Danger! Warning!";

    open my $log_file, '<', File::Spec->catfile($dir, 'test');
    my $txt = <$log_file>;
    like $txt, qr/Danger! Warning!/;
};
# Explicitly close the logger file handle for those systems that
# do not allow "open" files to be unlinked (Windows). GH#424.
my $log_engine = engine('logger');
close $log_engine->fh;

done_testing;