use Data::Dump;
use Class::MOP ();
+use Carp qw/ cluck /;
-our %LEVELS = ();
+our %LEVELS = (); # Levels stored as bit field, ergo debug = 1, warn = 2 etc
+our %LEVEL_MATCH = (); # Stored as additive, thus debug = 31, warn = 30 etc
has level => (is => 'rw');
has _body => (is => 'rw');
my @levels = qw[ debug info warn error fatal ];
my $meta = Class::MOP::get_metaclass_by_name(__PACKAGE__);
- for ( my $i = 0 ; $i < @levels ; $i++ ) {
+ my $summed_level = 0;
+ for ( my $i = $#levels ; $i >= 0 ; $i-- ) {
my $name = $levels[$i];
+
my $level = 1 << $i;
+ $summed_level |= $level;
$LEVELS{$name} = $level;
+ $LEVEL_MATCH{$name} = $summed_level;
$meta->add_method($name, sub {
my $self = shift;
my $orig = shift;
my $class = shift;
my $self = $class->$orig;
+
$self->levels( scalar(@_) ? @_ : keys %LEVELS );
+
return $self;
};
sub enable {
my ( $self, @levels ) = @_;
my $level = $self->level;
- for(map { $LEVELS{$_} } @levels){
+ for(map { $LEVEL_MATCH{$_} } @levels){
$level |= $_;
}
$self->level($level);
$self->level($level);
}
+our $HAS_DUMPED;
sub _dump {
my $self = shift;
+ unless ($HAS_DUMPED++) {
+ cluck("Catalyst::Log::_dump is deprecated and will be removed. Please change to using your own Dumper.\n");
+ }
$self->info( Data::Dump::dump(@_) );
}
# Alias _body to body, add a before modifier to warn..
my $meta = __PACKAGE__->meta; # Calling meta method here fine as we happen at compile time.
$meta->add_method('body', $meta->get_method('_body'));
-my %package_hash; # Only warn once per method, per package.
+my %package_hash; # Only warn once per method, per package.
# I haven't provided a way to disable them, patches welcome.
$meta->add_before_method_modifier('body', sub {
my $class = blessed(shift);
=head2 abort
-Should Catalyst emit logs for this request? Will be reset at the end of
-each request.
+Should Catalyst emit logs for this request? Will be reset at the end of
+each request.
*NOTE* This method is not compatible with other log apis, so if you plan
to use Log4Perl or another logger, you should call it like this:
=head1 COPYRIGHT
-This program is free software, you can redistribute it and/or modify
+This library is free software. You can redistribute it and/or modify
it under the same terms as Perl itself.
=cut