13 use POSIX qw(strftime);
15 my $data_dumper_available;
18 eval("use Data::Dumper");
19 $data_dumper_available = $@ ? 0 : 1;
22 $global_trace_subs = 0;
29 $self->{"calldepth"} = 0;
30 $self->{"file"} = "/tmp/lx-office-debug.log";
31 $self->{"target"} = FILE_TARGET;
33 $self->{"trace_subs"} = 0;
36 $self->{$_[0]} = $_[1];
45 my ($self, $target, $file) = @_;
47 if ((FILE_TARGET == $target) && $file) {
48 $self->{"file"} = $file;
49 $self->{"target"} = FILE_TARGET;
51 } elsif (STDERR_TARGET == $target) {
52 $self->{"target"} = STDERR_TARGET;
59 if (!$self->{"trace_subs"} && !$global_trace_subs) {
63 my ($package, $filename, $line, $subroutine) = caller(1);
64 my ($dummy1, $self_filename, $self_line) = caller(0);
66 my $indent = " " x $self->{"calldepth"};
67 $self->{"calldepth"} += 1;
69 if (!defined($package)) {
70 $self->_write("enter_sub", $indent . "top-level?\n");
72 $self->_write("enter_sub", $indent . "${subroutine} in " .
73 "${self_filename}:${self_line} called from " .
74 "${filename}:${line}\n");
81 if (!$self->{"trace_subs"} && !$global_trace_subs) {
85 my ($package, $filename, $line, $subroutine) = caller(1);
86 my ($dummy1, $self_filename, $self_line) = caller(0);
88 $self->{"calldepth"} -= 1;
89 my $indent = " " x $self->{"calldepth"};
91 if (!defined($package)) {
92 $self->_write("leave_sub", $indent . "top-level?\n");
94 $self->_write("leave_sub", $indent . "${subroutine} in " .
95 "${self_filename}:${self_line}\n");
100 my ($self, $level, $message) = @_;
101 my ($log_level) = $self->{"level"};
103 if ($global_level && ($global_level > $log_level)) {
104 $log_level = $global_level;
107 if ($log_level >= $level) {
108 $self->_write(INFO == $level ? "info" :
109 DEBUG1 == $level ? "debug1" : "debug2",
115 my ($self, $level, $name, $variable) = @_;
117 if ($data_dumper_available) {
118 $self->message($level, "dumping ${name}:\n" . Dumper($variable));
120 $self->message($level, "dumping ${name}: Data::Dumper not available; " .
121 "variable cannot be dumped");
125 sub enable_sub_tracing {
127 $self->{"trace_subs"} = 1;
130 sub disable_sub_tracing {
132 $self->{"trace_subs"} = 1;
136 my ($self, $prefix, $message) = @_;
137 my $date = strftime("%Y-%m-%d %H:%M:%S $$ ${prefix}: ", localtime(time()));
142 if ((FILE_TARGET == $self->{"target"}) &&
143 open(FILE, ">>" . $self->{"file"})) {
144 print(FILE "${date}${message}\n");
147 } elsif (STDERR_TARGET == $self->{"target"}) {
148 print(STDERR "${date}${message}\n");