use Data::Dump;
use Class::MOP ();
-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 $class = shift;
my $self = $class->$orig;
- if (@_ == 1 && $_[0] eq 'debug') {
- $self->levels( keys %LEVELS );
- } else {
- $self->levels( scalar(@_) ? @_ : keys %LEVELS );
- }
+ $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);