-
Notifications
You must be signed in to change notification settings - Fork 273
/
logger.t
116 lines (93 loc) · 2.71 KB
/
logger.t
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 engine 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;