Commit | Line | Data |
fc7ec1d9 |
1 | package Catalyst::Log; |
2 | |
3 | use strict; |
4 | use base 'Class::Accessor::Fast'; |
9b2bc37b |
5 | use Data::Dumper; |
6 | |
a6433a05 |
7 | our %LEVELS = (); |
8 | |
9 | __PACKAGE__->mk_accessors('level'); |
846772b7 |
10 | |
2f9e6321 |
11 | { |
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 | |
38 | sub new { |
39 | my $class = shift; |
40 | my $self = $class->SUPER::new; |
41 | $self->levels( scalar(@_) ? @_ : keys %LEVELS ); |
42 | return $self; |
43 | } |
44 | |
45 | sub levels { |
46 | my ( $self, @levels ) = @_; |
47 | $self->level(0); |
48 | $self->enable(@levels); |
49 | } |
50 | |
51 | sub enable { |
52 | my ( $self, @levels ) = @_; |
53 | $self->{level} |= $_ for map { $LEVELS{$_} } @levels; |
54 | } |
846772b7 |
55 | |
a6433a05 |
56 | sub disable { |
57 | my ( $self, @levels ) = @_; |
58 | $self->{level} &= ~$_ for map { $LEVELS{$_} } @levels; |
846772b7 |
59 | } |
60 | |
a6433a05 |
61 | sub _dump { |
846772b7 |
62 | my $self = shift; |
63 | local $Data::Dumper::Terse = 1; |
64 | $self->info( Dumper( $_[0] ) ); |
65 | } |
66 | |
67 | sub _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 | |
75 | 1; |
76 | |
77 | __END__ |
fc7ec1d9 |
78 | |
79 | =head1 NAME |
80 | |
81 | Catalyst::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 |
97 | See L<Catalyst>. |
98 | |
99 | =head1 DESCRIPTION |
100 | |
a6433a05 |
101 | This module provides the default, simple logging functionality for |
61b1e958 |
102 | Catalyst. |
a6433a05 |
103 | If you want something different set C<$c->log> in your application |
61b1e958 |
104 | module, e.g.: |
82d2fcbe |
105 | |
106 | $c->log( MyLogger->new ); |
107 | |
108 | Your 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 | |
147 | Constructor, defaults to enable all levels unless levels a provieded in |
148 | arguments. |
149 | |
150 | $log = Catalyst::Log->new; |
151 | $log = Catalyst::Log->new( 'warn', 'error', 'fatal' ); |
152 | |
153 | =item levels |
154 | |
155 | Set log levels |
b22c6668 |
156 | |
a6433a05 |
157 | $log->levels( 'warn', 'error', 'fatal' ); |
fc7ec1d9 |
158 | |
a6433a05 |
159 | =item enable |
fc7ec1d9 |
160 | |
a6433a05 |
161 | Enable log levels |
fc7ec1d9 |
162 | |
a6433a05 |
163 | $log->enable( 'warn', 'error' ); |
fc7ec1d9 |
164 | |
a6433a05 |
165 | =item disable |
fc7ec1d9 |
166 | |
a6433a05 |
167 | Disable 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 | |
181 | Is the log level active? |
182 | |
b22c6668 |
183 | =back |
184 | |
fc7ec1d9 |
185 | =head1 SEE ALSO |
186 | |
187 | L<Catalyst>. |
188 | |
189 | =head1 AUTHOR |
190 | |
191 | Sebastian Riedel, C<sri@cpan.org> |
61b1e958 |
192 | Marcus Ramberg, C<mramberg@cpan.org> |
a6433a05 |
193 | Christian Hansen, C<ch@ngmedia.com> |
fc7ec1d9 |
194 | |
195 | =head1 COPYRIGHT |
196 | |
a6433a05 |
197 | This program is free software, you can redistribute it and/or modify |
61b1e958 |
198 | it under the same terms as Perl itself. |
fc7ec1d9 |
199 | |
200 | =cut |
201 | |
202 | 1; |