diff options
Diffstat (limited to 'Spline/Log.pm')
-rw-r--r-- | Spline/Log.pm | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/Spline/Log.pm b/Spline/Log.pm new file mode 100644 index 0000000..f56d5f0 --- /dev/null +++ b/Spline/Log.pm @@ -0,0 +1,147 @@ +#!/usr/bin/perl +=pod + +=head1 NAME + +Spline::Log - Utilities for logging + +=head1 SYNOPSIS + + use Spline::Log qw(...); + + set_verbose($bool); + set_log_context($context); + debug($message); + info($message); + +=head1 DESCRIPTION + +=cut + +package Spline::Log; + +use strict; +use warnings; +use feature 'say'; + +use base 'Exporter'; +our @EXPORT = qw(); +our @EXPORT_OK = qw( + set_verbose + set_log_context + debug + info +); + +my $context = undef; +my $verbose = 0; + +=head2 set_verbose + + set_verbose($bool); + +Specify if you want to see the debug messages. If the supplied value +is true, you will see this messages, otherwise only the info messages +are logged. + +=cut + +sub set_verbose($) { + my $value = shift; + + if ($value) { + $verbose = 1; + } + else { + $verbose = 0; + } +} + +=head2 set_log_context + + set_log_context($context); + +Set the logging context, that should be added to all messages. If you +may have interleaving log lines, you could use this context to tag the +correlating lines. + +This method set the new context and returns the previous value. + +=cut + +sub set_log_context($) { + my $old = $context; + $context = '' . shift; + return $old; +} + +=head2 debug + + debug($message); + +Lop the supplied message, but only if verbose is set. The message is +prepended with the logging context (if defined). + +=cut + +sub debug($) { + my $msg = shift; + + if ($verbose) { + _log($msg); + } +} + +=head2 info + + info($message); + +Log the supplied message, regardless of the verbosity. The message is +prepended with the logging context (if defined). + +=cut + +sub info($) { + my $msg = shift; + _log($msg); +} + +=head2 _get_context + + $context = _get_context(); + +If the logging context is defined, return the context followd by a +colon and a space (ready for output). If the context is undefined an +empty space is returned. + +=cut + +sub _get_context() { + return '' unless defined $context; + return "$context: "; +} + +=head2 _log + + _log($msg); + +Log the supplied message. The message is prepended with the logging +context (if defined). So the log format is something like this: + + CONTEXT: MESSAGE + +=cut + +sub _log($) { + my $msg = shift; + say _get_context() . $msg; +} + +=head1 AUTHOR + +Alexander Sulfrian <alex@spline.inf.fu-berlin.de> + +=cut + +1; +# vim: set et tabstop=4 tw=70: |