runtime: fix logging with -Debug
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Log.pm
index 7a69d03..80e7182 100644 (file)
@@ -1,7 +1,10 @@
 package Catalyst::Log;
 
 use Moose;
+with 'MooseX::Emulate::Class::Accessor::Fast';
+
 use Data::Dump;
+use Class::MOP ();
 
 our %LEVELS = ();
 
@@ -12,7 +15,7 @@ has abort => (is => 'rw');
 {
     my @levels = qw[ debug info warn error fatal ];
 
-    my $meta = __PACKAGE__->meta;
+    my $meta = Class::MOP::get_metaclass_by_name(__PACKAGE__);
     for ( my $i = 0 ; $i < @levels ; $i++ ) {
 
         my $name  = $levels[$i];
@@ -39,7 +42,13 @@ around new => sub {
     my $orig = shift;
     my $class = shift;
     my $self = $class->$orig;
-    $self->levels( scalar(@_) ? @_ : keys %LEVELS );
+
+    if (@_ == 1 && $_[0] eq 'debug') {
+        $self->levels( keys %LEVELS );
+    } else {
+        $self->levels( scalar(@_) ? @_ : keys %LEVELS );
+    }
+
     return $self;
 };
 
@@ -98,8 +107,23 @@ sub _send_to_log {
     print STDERR @_;
 }
 
+# 5.7 compat code.
+# 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. 
+                  # I haven't provided a way to disable them, patches welcome.
+$meta->add_before_method_modifier('body', sub {
+    my $class = blessed(shift);
+    $package_hash{$class}++ || do {
+        warn("Class $class is calling the deprecated method Catalyst::Log->body method,\n"
+            . "this will be removed in Catalyst 5.81");
+    };
+});
+# End 5.70 backwards compatibility hacks.
+
 no Moose;
-__PACKAGE__->meta->make_immutable();
+__PACKAGE__->meta->make_immutable(inline_constructor => 0);
 
 1;