Forum Webscript.Ru
Программирование => Perl => Тема начата: 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;
-
open STDERR,">> $file" or die $!;
-
Я веду логи так:
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: $!";
}