Reformatted documentation
[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", @_ );
b5ecfcf0 74 $self->{body} .=
75 sprintf( "[%s] [catalyst] [%s] %s\n", $time, $level, $message );
4be535b1 76}
77
78sub _flush {
b5ecfcf0 79 my $self = shift;
80 if ( $self->abort || !$self->body ) {
81 $self->abort(undef);
82 }
83 else {
84 print( STDERR $self->body );
4be535b1 85 }
86 $self->body(undef);
846772b7 87}
88
891;
90
91__END__
fc7ec1d9 92
93=head1 NAME
94
95Catalyst::Log - Catalyst Log Class
96
97=head1 SYNOPSIS
98
82d2fcbe 99 $log = $c->log;
846772b7 100 $log->debug($message);
101 $log->info($message);
102 $log->warn($message);
103 $log->error($message);
104 $log->fatal($message);
846772b7 105
f4dbb0d9 106 if ( $log->is_debug ) {
846772b7 107 # expensive debugging
108 }
82d2fcbe 109
a6433a05 110
fc7ec1d9 111See L<Catalyst>.
112
113=head1 DESCRIPTION
114
a6433a05 115This module provides the default, simple logging functionality for
61b1e958 116Catalyst.
a6433a05 117If you want something different set C<$c->log> in your application
61b1e958 118module, e.g.:
82d2fcbe 119
120 $c->log( MyLogger->new );
121
122Your logging object is expected to provide the interface described here.
123
a6433a05 124=head1 LOG LEVELS
125
b5ecfcf0 126=head2 debug
a6433a05 127
128 $log->is_debug;
129 $log->debug($message);
130
b5ecfcf0 131=head2 info
a6433a05 132
133 $log->is_info;
134 $log->info($message);
135
b5ecfcf0 136=head2 warn
a6433a05 137
138 $log->is_warn;
139 $log->warn($message);
140
b5ecfcf0 141=head2 error
a6433a05 142
143 $log->is_error;
144 $log->error($message);
145
b5ecfcf0 146=head2 fatal
a6433a05 147
148 $log->is_fatal;
149 $log->fatal($message);
150
b22c6668 151=head1 METHODS
fc7ec1d9 152
b5ecfcf0 153=head2 new
a6433a05 154
26e73131 155Constructor. Defaults to enable all levels unless levels are provided in
a6433a05 156arguments.
157
158 $log = Catalyst::Log->new;
26e73131 159 $log = Catalyst::Log->new( 'warn', 'error' );
a6433a05 160
b5ecfcf0 161=head2 levels
a6433a05 162
163Set log levels
b22c6668 164
a6433a05 165 $log->levels( 'warn', 'error', 'fatal' );
fc7ec1d9 166
b5ecfcf0 167=head2 enable
fc7ec1d9 168
a6433a05 169Enable log levels
fc7ec1d9 170
a6433a05 171 $log->enable( 'warn', 'error' );
fc7ec1d9 172
b5ecfcf0 173=head2 disable
fc7ec1d9 174
a6433a05 175Disable log levels
fc7ec1d9 176
a6433a05 177 $log->disable( 'warn', 'error' );
fc7ec1d9 178
b5ecfcf0 179=head2 is_debug
a2f2cde9 180
b5ecfcf0 181=head2 is_error
a2f2cde9 182
b5ecfcf0 183=head2 is_fatal
a2f2cde9 184
b5ecfcf0 185=head2 is_info
a2f2cde9 186
b5ecfcf0 187=head2 is_warn
49ba64d7 188
189Is the log level active?
190
b5ecfcf0 191=head2 abort
4be535b1 192
193Should Catalyst emit logs for this request? Will be reset at the end of
194each request.
195
196*NOTE* This method is not compatible with other log apis, so if you plan
197to use Log4Perl or another logger, you should call it like this:
198
199 $c->log->abort(1) if $c->log->can('abort');
200
fc7ec1d9 201=head1 SEE ALSO
202
203L<Catalyst>.
204
205=head1 AUTHOR
206
207Sebastian Riedel, C<sri@cpan.org>
61b1e958 208Marcus Ramberg, C<mramberg@cpan.org>
a6433a05 209Christian Hansen, C<ch@ngmedia.com>
fc7ec1d9 210
211=head1 COPYRIGHT
212
a6433a05 213This program is free software, you can redistribute it and/or modify
61b1e958 214it under the same terms as Perl itself.
fc7ec1d9 215
216=cut
217
2181;