summaryrefslogtreecommitdiffstats
path: root/Spline/Log.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Spline/Log.pm')
-rw-r--r--Spline/Log.pm147
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: