Fixed table debug output
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Log.pm
CommitLineData
fc7ec1d9 1package Catalyst::Log;
2
3use strict;
4use base 'Class::Accessor::Fast';
9b2bc37b 5use Data::Dumper;
6
a6433a05 7our %LEVELS = ();
8
9__PACKAGE__->mk_accessors('level');
846772b7 10
3ad654e0 11BEGIN {
a6433a05 12 my @levels = qw[ debug info warn error fatal ];
846772b7 13
14 for ( my $i = 0 ; $i < @levels ; $i++ ) {
15
16 my $name = $levels[$i];
17 my $level = 1 << $i;
18
a6433a05 19 $LEVELS{$name} = $level;
20
21 no strict 'refs';
22
846772b7 23 *{$name} = sub {
24 my $self = shift;
25
26 if ( $self->{level} & $level ) {
27 $self->_log( $name, @_ );
28 }
29 };
30
31 *{"is_$name"} = sub {
32 my $self = shift;
846772b7 33 return $self->{level} & $level;
34 };
35 }
a6433a05 36}
37
38sub new {
39 my $class = shift;
40 my $self = $class->SUPER::new;
41 $self->levels( scalar(@_) ? @_ : keys %LEVELS );
42 return $self;
43}
44
45sub levels {
46 my ( $self, @levels ) = @_;
47 $self->level(0);
48 $self->enable(@levels);
49}
50
51sub enable {
52 my ( $self, @levels ) = @_;
53 $self->{level} |= $_ for map { $LEVELS{$_} } @levels;
54}
846772b7 55
a6433a05 56sub disable {
57 my ( $self, @levels ) = @_;
58 $self->{level} &= ~$_ for map { $LEVELS{$_} } @levels;
846772b7 59}
60
a6433a05 61sub _dump {
846772b7 62 my $self = shift;
63 local $Data::Dumper::Terse = 1;
64 $self->info( Dumper( $_[0] ) );
65}
66
67sub _log {
68 my $self = shift;
69 my $level = shift;
70 my $time = localtime(time);
71 my $message = join( "\n", @_ );
72 printf( STDERR "[%s] [catalyst] [%s] %s\n", $time, $level, $message );
73}
74
751;
76
77__END__
fc7ec1d9 78
79=head1 NAME
80
81Catalyst::Log - Catalyst Log Class
82
83=head1 SYNOPSIS
84
82d2fcbe 85 $log = $c->log;
846772b7 86 $log->debug($message);
87 $log->info($message);
88 $log->warn($message);
89 $log->error($message);
90 $log->fatal($message);
846772b7 91
f4dbb0d9 92 if ( $log->is_debug ) {
846772b7 93 # expensive debugging
94 }
82d2fcbe 95
a6433a05 96
fc7ec1d9 97See L<Catalyst>.
98
99=head1 DESCRIPTION
100
a6433a05 101This module provides the default, simple logging functionality for
61b1e958 102Catalyst.
a6433a05 103If you want something different set C<$c->log> in your application
61b1e958 104module, e.g.:
82d2fcbe 105
106 $c->log( MyLogger->new );
107
108Your logging object is expected to provide the interface described here.
109
a6433a05 110=head1 LOG LEVELS
111
112=over 4
113
114=item debug
115
116 $log->is_debug;
117 $log->debug($message);
118
119=item info
120
121 $log->is_info;
122 $log->info($message);
123
124=item warn
125
126 $log->is_warn;
127 $log->warn($message);
128
129=item error
130
131 $log->is_error;
132 $log->error($message);
133
134=item fatal
135
136 $log->is_fatal;
137 $log->fatal($message);
138
139=back
fc7ec1d9 140
b22c6668 141=head1 METHODS
fc7ec1d9 142
b22c6668 143=over 4
fc7ec1d9 144
a6433a05 145=item new
146
147Constructor, defaults to enable all levels unless levels a provieded in
148arguments.
149
150 $log = Catalyst::Log->new;
151 $log = Catalyst::Log->new( 'warn', 'error', 'fatal' );
152
153=item levels
154
155Set log levels
b22c6668 156
a6433a05 157 $log->levels( 'warn', 'error', 'fatal' );
fc7ec1d9 158
a6433a05 159=item enable
fc7ec1d9 160
a6433a05 161Enable log levels
fc7ec1d9 162
a6433a05 163 $log->enable( 'warn', 'error' );
fc7ec1d9 164
a6433a05 165=item disable
fc7ec1d9 166
a6433a05 167Disable log levels
fc7ec1d9 168
a6433a05 169 $log->disable( 'warn', 'error' );
fc7ec1d9 170
49ba64d7 171=item is_debug
a2f2cde9 172
49ba64d7 173=item is_error
a2f2cde9 174
49ba64d7 175=item is_fatal
a2f2cde9 176
49ba64d7 177=item is_info
a2f2cde9 178
49ba64d7 179=item is_warn
180
181Is the log level active?
182
b22c6668 183=back
184
fc7ec1d9 185=head1 SEE ALSO
186
187L<Catalyst>.
188
189=head1 AUTHOR
190
191Sebastian Riedel, C<sri@cpan.org>
61b1e958 192Marcus Ramberg, C<mramberg@cpan.org>
a6433a05 193Christian Hansen, C<ch@ngmedia.com>
fc7ec1d9 194
195=head1 COPYRIGHT
196
a6433a05 197This program is free software, you can redistribute it and/or modify
61b1e958 198it under the same terms as Perl itself.
fc7ec1d9 199
200=cut
201
2021;