Forum Webscript.Ru

Программирование => Perl => Тема начата: micolo от 28 Ноября 2006, 16:38:18

Название: логирование Net::FTP
Отправлено: micolo от 28 Ноября 2006, 16:38:18
Доброго времени суток уважаемые знатоки! У меня такой вопрос. Необходимо при работе с фтп вести логирование в отдельный файл, на предмет ошибок, удачных загрузок и т.д. с учётом времени. Как лучше всего это сделать учитывая что в ключевых действия стоит это страшное слово die :D .

Вот стандартный пример:


$ftp = Net::FTP->new("127.0.0.1",Timeout => 30, Debug => 0) ||  die "Can\'t connect to ftp server.\\n";

$ftp->login(\'login,\'pass\') || die "error.\\n";

$ftp->binary();
$ftp->get($aa,\'../new/\'.$aa)  or die "get failed ", $ftp->message;
Название: логирование Net::FTP
Отправлено: arto от 28 Ноября 2006, 18:17:26
open STDERR,">> $file" or die $!;
Название: логирование Net::FTP
Отправлено: vladsu от 28 Ноября 2006, 19:10:13
Я веду логи так:


my $error = 1;
my $logName = \'\';
my $logBuffer;

my $scpObj = Net::SCP->new( { \'host\'=>$hostname, \'user\'=>$username } );
$scpObj->scp( # copy file
                      , # to destination
                      ) or( $logBuffer .= addIntoLog( "File can\'t be copied!\\n\\t"
                                                    . $scpObj->{errstr},1)
                            and $error = 0
                          );
if ($error == 1) {
    $logBuffer .= addIntoLog( "File were copied successfully!");
}
#------------------------------
# timenow
#------------------------------
sub timenow {
    my $errMsg = shift;
    my $timeInSec = shift;

    if ( defined $timeInSec ) {
        unless ( $timeInSec =~ /^\\d+$/ ) {
             $$errMsg .= "Fuction waiting time in seconds insterd $timeInSec";
        }
    }
   
    my ($sec,$min,$hour,$day,$month,$year) = localtime( defined $timeInSec
                                                      ? $timeInSec
                                                      : time
                                                      );
    return $year+1900,$month+1,$day,$hour,$min,$sec;
}

#------------------------------
# Add into Log
#------------------------------
sub addIntoLog {
    my ( $mess, $flag ) = @_;
    unless ( defined $flag && $flag != 0 ) {
         sprintf "[%04d-%02d-%02d %02d:%02d:%02d] $mess\\n",  timenow(\\$error);
    } elsif ( $flag == 2 ) {
         sprintf "[%04d-%02d-%02d %02d:%02d:%02d] $mess\\n", timenow(\\$error);
    } else {
         sprintf "[%04d-%02d-%02d %02d:%02d:%02d] $mess\\n",  timenow(\\$error);
    }
}

#------------------------------
# Writing a Log File
#------------------------------
END {
    $logFile ||= $logName . \'.log\';
    open LOGFH, ">> $logFile" or die "The $logFile file can\'t be created: $!";
      print LOGFH $logBuffer . "\\n" if defined $logBuffer;
    close LOGFH or die "The $logFile file can\'t be closed: $!";
}