Bio-EnsEMBL
view release on metacpan or search on metacpan
lib/Bio/EnsEMBL/Utils/Logger.pm view on Meta::CPAN
my ($self, $txt, $indent, $stamped) = @_;
return(0) unless ($self->{'loglevel'} >= 2);
$txt = "WARNING: " . $txt;
$self->log_generic($txt, $indent, $stamped);
$self->{'_warnings'}++;
return(1);
}
sub info {
my ($self, $txt, $indent, $stamped) = @_;
return(0) unless ($self->{'loglevel'} >= 3);
$self->log_generic($txt, $indent, $stamped);
return(1);
}
=head2 debug
Arg[1] : String $txt - the warning text to log
Arg[2] : Int $indent - indentation level for log message
Example : my $log = $support->log_filehandle;
$support->log_verbose('Log this verbose message.\n', 1);
Description : Logs a message via $self->log if --verbose option was used
Return type : TRUE on success, FALSE if not verbose
Exceptions : none
Caller : general
=cut
sub debug {
my ($self, $txt, $indent, $stamped) = @_;
return(0) unless ($self->{'loglevel'} >= 4);
$self->log_generic($txt, $indent, $stamped);
return(1);
}
sub log_progress {
my $self = shift;
my $name = shift;
my $curr = shift;
my $indent = shift;
throw("You must provide a name and the current value for your progress bar")
unless ($name and $curr);
# return if we haven't reached the next increment
return if ($curr < int($self->{'_progress'}->{$name}->{'next'}));
my $index = $self->{'_progress'}->{$name}->{'index'};
my $num_bins = $self->{'_progress'}->{$name}->{'numbins'};
my $percent = $index/$num_bins*100;
my $log_str;
$log_str .= ' 'x$indent if ($index == 0);
$log_str .= "\b"x4;
$log_str .= sprintf("%3s%%", $percent);
$log_str .= "\n" if ($curr == $self->{'_progress'}->{$name}->{'max_val'});
$self->info($log_str);
# increment counters
$self->{'_progress'}->{$name}->{'index'}++;
$self->{'_progress'}->{$name}->{'next'} += $self->{'_progress'}->{$name}->{'binsize'};
}
sub log_progressbar {
my $self = shift;
my $name = shift;
my $curr = shift;
my $indent = shift;
throw("You must provide a name and the current value for your progress bar")
unless ($name and $curr);
# return if we haven't reached the next increment
return if ($curr < int($self->{'_progress'}->{$name}->{'next'}));
my $index = $self->{'_progress'}->{$name}->{'index'};
my $num_bins = $self->{'_progress'}->{$name}->{'numbins'};
my $percent = $index/$num_bins*100;
my $log_str = "\r".(' 'x$indent)."[".('='x$index).(' 'x($num_bins-$index))."] ${percent}\%";
$log_str .= "\n" if ($curr == $self->{'_progress'}->{$name}->{'max_val'});
$self->info($log_str);
# increment counters
$self->{'_progress'}->{$name}->{'index'}++;
$self->{'_progress'}->{$name}->{'next'} += $self->{'_progress'}->{$name}->{'binsize'};
}
sub init_progress {
my $self = shift;
my $max = shift;
my $num_bins = shift || 50;
throw("You must provide the maximum value for your progress bar")
unless (defined($max));
# auto-generate a unique name for your progressbar
my $name = time . '_' . int(rand(1000));
# calculate bin size; we will use 50 bins (2% increments)
my $binsize = $max/$num_bins;
$self->{'_progress'}->{$name}->{'max_val'} = $max;
$self->{'_progress'}->{$name}->{'binsize'} = $binsize;
$self->{'_progress'}->{$name}->{'numbins'} = $num_bins;
$self->{'_progress'}->{$name}->{'next'} = 0;
$self->{'_progress'}->{$name}->{'index'} = 0;
return $name;
}
=head2 log_filehandle
Arg[1] : (optional) String $mode - file access mode
Example : my $log = $support->log_filehandle;
# print to the filehandle
print $log 'Lets start logging...\n';
# log via the wrapper $self->log()
$support->log('Another log message.\n');
Description : Returns a filehandle for logging (STDERR by default, logfile if
set from config or commandline). You can use the filehandle
directly to print to, or use the smart wrapper $self->log().
Logging mode (truncate or append) can be set by passing the
mode as an argument to log_filehandle(), or with the
--logappend commandline option (default: truncate)
Return type : Filehandle - the filehandle to log to
Exceptions : thrown if logfile can't be opened
Caller : general
=cut
sub log_filehandle {
my ($self, $mode) = @_;
unless ($self->{'_log_filehandle'}) {
$mode ||= '>';
$mode = '>>' if ($self->logappend);
( run in 1.546 second using v1.01-cache-2.11-cpan-ceb78f64989 )