LXDebug: bei SHOW_CALLER ersten Caller außerhalb von LXDebug.pm nehmen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 11 Jan 2017 09:23:00 +0000 (10:23 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 11 Jan 2017 09:50:50 +0000 (10:50 +0100)
Andernfalls wird beim Aufruf von z.B. »SL::Controller::CustomerVendor →
LXDebug::dump() → LXDebug::message()« fälschlicherweise
»LXDebug::dump()« als Caller ausgegeben. Das interessiert die Nutzer*in
aber im Zweifelsfall nicht, sondern »SL::Controller::CustomerVendor«.

SL/LXDebug.pm

index b62b2da..e0b7cca 100644 (file)
@@ -269,8 +269,18 @@ sub _write {
   my @prefixes = ($prefix);
 
   if ($options{show_caller}) {
-    my ($package, $filename, $line, $subroutine) = caller(1);
-    push @prefixes, "${filename}:${line}";
+    my $level = 1;
+    while (1) {
+      my ($package, $filename, $line, $subroutine) = caller($level);
+
+      if (($filename // '') =~ m{LXDebug\.pm$}) {
+        $level++;
+        next;
+      }
+
+      push @prefixes, "${filename}:${line}";
+      last;
+    }
   }
 
   $prefix = join ' ', grep { $_ } @prefixes;