summaryrefslogtreecommitdiffstats
path: root/Spline/Log.pm
blob: f56d5f0606d86dd429e7824beb9921b996d3a635 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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: