Updated catalyst.pl
[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');
4be535b1 10__PACKAGE__->mk_accessors('body');
11__PACKAGE__->mk_accessors('abort');
846772b7 12
2f9e6321 13{
a6433a05 14 my @levels = qw[ debug info warn error fatal ];
846772b7 15
16 for ( my $i = 0 ; $i < @levels ; $i++ ) {
17
18 my $name = $levels[$i];
19 my $level = 1 << $i;
20
a6433a05 21 $LEVELS{$name} = $level;
22
23 no strict 'refs';
24
846772b7 25 *{$name} = sub {
26 my $self = shift;
27
28 if ( $self->{level} & $level ) {
29 $self->_log( $name, @_ );
30 }
31 };
32
33 *{"is_$name"} = sub {
34 my $self = shift;
846772b7 35 return $self->{level} & $level;
36 };
37 }
a6433a05 38}
39
40sub new {
41 my $class = shift;
42 my $self = $class->SUPER::new;
43 $self->levels( scalar(@_) ? @_ : keys %LEVELS );
44 return $self;
45}
46
47sub levels {
48 my ( $self, @levels ) = @_;
49 $self->level(0);
50 $self->enable(@levels);
51}
52
53sub enable {
54 my ( $self, @levels ) = @_;
55 $self->{level} |= $_ for map { $LEVELS{$_} } @levels;
56}
846772b7 57
a6433a05 58sub disable {
59 my ( $self, @levels ) = @_;
60 $self->{level} &= ~$_ for map { $LEVELS{$_} } @levels;
846772b7 61}
62
a6433a05 63sub _dump {
846772b7 64 my $self = shift;
65 local $Data::Dumper::Terse = 1;
66 $self->info( Dumper( $_[0] ) );
67}
68
69sub _log {
70 my $self = shift;
71 my $level = shift;
72 my $time = localtime(time);
73 my $message = join( "\n", @_ );
4be535b1 74 $self->{body} .= sprintf( "[%s] [catalyst] [%s] %s\n",
75 $time, $level, $message ) ;
76}
77
78sub _flush {
79 my $self = shift;
80 if ( $self->abort || ! $self->body ) {
81 $self->abort(undef);
82 } else {
83 print( STDERR $self->body);
84 }
85 $self->body(undef);
846772b7 86}
87
881;
89
90__END__
fc7ec1d9 91
92=head1 NAME
93
94Catalyst::Log - Catalyst Log Class
95
96=head1 SYNOPSIS
97
82d2fcbe 98 $log = $c->log;
846772b7 99 $log->debug($message);
100 $log->info($message);
101 $log->warn($message);
102 $log->error($message);
103 $log->fatal($message);
846772b7 104
f4dbb0d9 105 if ( $log->is_debug ) {
846772b7 106 # expensive debugging
107 }
82d2fcbe 108
a6433a05 109
fc7ec1d9 110See L<Catalyst>.
111
112=head1 DESCRIPTION
113
a6433a05 114This module provides the default, simple logging functionality for
61b1e958 115Catalyst.
a6433a05 116If you want something different set C<$c->log> in your application
61b1e958 117module, e.g.:
82d2fcbe 118
119 $c->log( MyLogger->new );
120
121Your logging object is expected to provide the interface described here.
122
a6433a05 123=head1 LOG LEVELS
124
125=over 4
126
127=item debug
128
129 $log->is_debug;
130 $log->debug($message);
131
132=item info
133
134 $log->is_info;
135 $log->info($message);
136
137=item warn
138
139 $log->is_warn;
140 $log->warn($message);
141
142=item error
143
144 $log->is_error;
145 $log->error($message);
146
147=item fatal
148
149 $log->is_fatal;
150 $log->fatal($message);
151
152=back
fc7ec1d9 153
b22c6668 154=head1 METHODS
fc7ec1d9 155
b22c6668 156=over 4
fc7ec1d9 157
a6433a05 158=item new
159
26e73131 160Constructor. Defaults to enable all levels unless levels are provided in
a6433a05 161arguments.
162
163 $log = Catalyst::Log->new;
26e73131 164 $log = Catalyst::Log->new( 'warn', 'error' );
a6433a05 165
166=item levels
167
168Set log levels
b22c6668 169
a6433a05 170 $log->levels( 'warn', 'error', 'fatal' );
fc7ec1d9 171
a6433a05 172=item enable
fc7ec1d9 173
a6433a05 174Enable log levels
fc7ec1d9 175
a6433a05 176 $log->enable( 'warn', 'error' );
fc7ec1d9 177
a6433a05 178=item disable
fc7ec1d9 179
a6433a05 180Disable log levels
fc7ec1d9 181
a6433a05 182 $log->disable( 'warn', 'error' );
fc7ec1d9 183
49ba64d7 184=item is_debug
a2f2cde9 185
49ba64d7 186=item is_error
a2f2cde9 187
49ba64d7 188=item is_fatal
a2f2cde9 189
49ba64d7 190=item is_info
a2f2cde9 191
49ba64d7 192=item is_warn
193
194Is the log level active?
195
4be535b1 196=item abort
197
198Should Catalyst emit logs for this request? Will be reset at the end of
199each request.
200
201*NOTE* This method is not compatible with other log apis, so if you plan
202to use Log4Perl or another logger, you should call it like this:
203
204 $c->log->abort(1) if $c->log->can('abort');
205
b22c6668 206=back
207
4be535b1 208
209
fc7ec1d9 210=head1 SEE ALSO
211
212L<Catalyst>.
213
214=head1 AUTHOR
215
216Sebastian Riedel, C<sri@cpan.org>
61b1e958 217Marcus Ramberg, C<mramberg@cpan.org>
a6433a05 218Christian Hansen, C<ch@ngmedia.com>
fc7ec1d9 219
220=head1 COPYRIGHT
221
a6433a05 222This program is free software, you can redistribute it and/or modify
61b1e958 223it under the same terms as Perl itself.
fc7ec1d9 224
225=cut
226
2271;