ActionBar: Verwendung bei »Kontoauszug importieren«
[kivitendo-erp.git] / SL / LXDebug.pm
index c0983aa..e0b7cca 100644 (file)
@@ -11,7 +11,8 @@ use constant REQUEST_TIMER      =>  1 << 6;
 use constant REQUEST            =>  1 << 7;
 use constant WARN               =>  1 << 8;
 use constant TRACE2             =>  1 << 9;
-use constant ALL                => (1 << 10) - 1;
+use constant SHOW_CALLER        =>  1 << 10;
+use constant ALL                => (1 << 11) - 1;
 use constant DEVEL              => INFO | DEBUG1 | QUERY | TRACE | BACKTRACE_ON_ERROR | REQUEST_TIMER;
 
 use constant FILE_TARGET   => 0;
@@ -144,7 +145,10 @@ sub message {
   no warnings;
   my ($self, $level, $message) = @_;
 
-  $self->_write(level2string($level), $message) if (($self->{"level"} | $global_level) & $level || !$level);
+  my $show_caller = ($level | $global_level) & SHOW_CALLER();
+  $level         &= ~SHOW_CALLER();
+
+  $self->_write(level2string($level), $message, show_caller => $show_caller) if (($self->{"level"} | $global_level) & $level || !$level);
 }
 sub warn {
   no warnings;
@@ -260,7 +264,27 @@ sub is_tracing_enabled {
 
 sub _write {
   no warnings;
-  my ($self, $prefix, $message) = @_;
+  my ($self, $prefix, $message, %options) = @_;
+
+  my @prefixes = ($prefix);
+
+  if ($options{show_caller}) {
+    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;
+
   my @now  = gettimeofday();
   my $date = strftime("%Y-%m-%d %H:%M:%S." . sprintf('%03d', int($now[1] / 1000)) . " $$ [" . getpid() . "] ${prefix}: ", localtime($now[0]));
   local *FILE;
@@ -296,9 +320,10 @@ sub begin_request {
 }
 
 sub end_request {
-  my $self = shift;
+  my ($self, %params) = @_;
   return 1 unless want_request_timer();
-  $self->_write("time", $self->get_request_time);
+
+  $self->_write("time", sprintf('%f (%s/%s)', $self->get_request_time, $params{script_name}, $params{action}));
 
   $self->{calldepth} = 0;
 }