Server IP : 85.214.239.14 / Your IP : 3.17.175.191 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /proc/2/cwd/proc/2/root/proc/2/cwd/proc/3/root/proc/2/cwd/usr/share/perl5/Amavis/ |
Upload File : |
# SPDX-License-Identifier: GPL-2.0-or-later package Amavis::DbgLog; use strict; use re 'taint'; BEGIN { use vars qw(@ISA $VERSION); $VERSION = '2.412'; } use POSIX qw(locale_h strftime); use IO::File (); use Time::HiRes (); # use File::Temp (); use Amavis::Conf qw(:platform $TEMPBASE); use Amavis::Log qw(write_log); sub new { my $class = $_[0]; my($self,$fh); # eval { # calls croak() if an error occurs # $fh = File::Temp->new(DIR => $TEMPBASE, SUFFIX => '.log', # TEMPLATE => sprintf('dbg-%05d-XXXXXXXX',$my_pid)); # $fh or warn "Can't create a temporary debug log file: $!"; # 1; # } or do { # my $eval_stat = $@ ne '' ? $@ : "errno=$!"; chomp $eval_stat; # warn "Can't create a temporary debug log file: $eval_stat"; # }; $fh = IO::File->new_tmpfile; $fh or warn "Can't create a temporary debug log file: $!"; $self = bless { fh => $fh }, $class if $fh; $self; } sub DESTROY { my $self = $_[0]; undef $self->{fh}; }; sub flush { my $self = $_[0]; my $fh = $self->{fh}; !$fh ? 1 : $fh->flush; } sub reposition_to_end { my $self = $_[0]; my $fh = $self->{fh}; !$fh ? 1 : seek($fh,0,2); } # Log to a temporary file, to be retrieved later by dump_captured_log() # sub write_dbg_log { my($self, $level,$errmsg) = @_; my $fh = $self->{fh}; # ignoring failures $fh->printf("%06.3f %d %s\n", Time::HiRes::time, $level, $errmsg) if $fh; 1; } sub dump_captured_log { my($self, $dump_log_level,$enable_log_capture_dump) = @_; my $fh = $self->{fh}; if ($fh) { # copy the captured temporary log to a real log if requested if ($enable_log_capture_dump) { $fh->flush or die "Can't flush debug log file: $!"; $fh->seek(0,0) or die "Can't rewind debug log file: $!"; my($ln,$any_logged); for ($! = 0; defined($ln=<$fh>); $! = 0) { chomp($ln); my($timestamp,$level,$errmsg) = split(/ /,$ln,3); if (!$any_logged) { write_log($dump_log_level, 'CAPTURED DEBUG LOG DUMP BEGINS'); $any_logged = 1; } write_log($dump_log_level, sprintf('%s:%06.3f %s', strftime('%H:%M', localtime($timestamp)), $timestamp - int($timestamp/60)*60, $errmsg)); } defined $ln || $! == 0 or die "Error reading from debug log file: $!"; write_log($dump_log_level, 'CAPTURED DEBUG LOG DUMP ENDS') if $any_logged; } # clear the temporary file, prepare it for re-use $fh->seek(0,0) or die "Can't rewind debug log file: $!"; $fh->truncate(0) or die "Can't truncate debug log file: $!"; } 1; } 1;