File Coverage

blib/lib/XAS/Lib/Log.pm
Criterion Covered Total %
statement 9 42 21.4
branch 0 12 0.0
condition n/a
subroutine 3 10 30.0
pod 2 4 50.0
total 14 68 20.5


line stmt bran cond sub pod time code
1             package XAS::Lib::Log;
2              
3             our $VERSION = '0.03';
4              
5 1     1   747 use DateTime;
  1         2  
  1         23  
6 1     1   3 use XAS::Constants ':logging HASHREF';
  1         1  
  1         6  
7              
8             use XAS::Class
9 1         7 version => $VERSION,
10             base => 'XAS::Singleton',
11             accessors => 'logger',
12             filesystem => 'File',
13             utils => ':boolean :validation load_module',
14             vars => {
15             LEVELS => {
16             trace => 0,
17             debug => 0,
18             info => 1,
19             warn => 1,
20             error => 1,
21             fatal => 1,
22             }
23             }
24 1     1   157 ;
  1         1  
25              
26             #use Data::Dumper;
27              
28             # ------------------------------------------------------------------------
29             # Public Methods
30             # ------------------------------------------------------------------------
31              
32             sub level {
33 0     0 1   my $self = shift;
34             my ($level, $action) = validate_params(\@_, [
35             { regex => LOG_LEVELS },
36             { optional => 1, default => undef ,
37             callbacks => {
38             'must be a boolean value or undef' => sub {
39 0     0     my $param = shift;
40 0 0         return 1 unless (defined($param));
41 0 0         return 1 if (is_truthy($param));
42 0 0         return 1 if (is_falsey($param));
43             }
44             }
45             },
46 0           ]);
47              
48 0 0         $self->{$level} = $action if (defined($action));
49              
50 0           return $self->{$level};
51              
52             }
53              
54             sub build {
55 0     0 0   my $self = shift;
56 0           my ($level, $message) = validate_params(\@_, [
57             { regex => LOG_LEVELS },
58             1
59             ]);
60              
61             return {
62 0           hostname => $self->env->host,
63             datetime => DateTime->now(time_zone => 'local'),
64             process => $self->env->script,
65             pid => $$,
66             msgid => 0,
67             facility => $self->env->log_facility,
68             priority => $level,
69             message => $message,
70             };
71              
72             }
73              
74             sub activate {
75 0     0 0   my $self = shift;
76              
77 0           my $type = $self->env->log_type;
78 0           my $logger = 'XAS::Lib::Log::' . ucfirst($type);
79              
80 0           load_module($logger);
81              
82 0           $self->{'logger'} = $logger->new();
83              
84             }
85              
86             # ------------------------------------------------------------------------
87             # Private Methods
88             # ------------------------------------------------------------------------
89              
90             sub init {
91 0     0 1   my $class = shift;
92              
93 0           my $self = $class->SUPER::init(@_);
94              
95             # populate $self for each level using the
96             # value in $LEVELS
97              
98 0           my $levels = $self->class->hash_vars('LEVELS');
99              
100 0           while (my ($level, $default) = each %$levels) {
101              
102             # set defined levels
103              
104 0           $self->level($level, $default);
105              
106             # autogenerate some methods, saves typing
107              
108             $self->class->methods($level => sub {
109 0     0     my $self = shift;
110              
111 0 0         if ($self->{$level}) {
112              
113 0           my $args = $self->build($level, join(" ", @_));
114 0           $self->logger->output($args);
115              
116             }
117              
118 0           });
119              
120             $self->class->methods($level . '_msg' => sub {
121 0     0     my $self = shift;
122              
123 0 0         if ($self->{$level}) {
124              
125 0           my $args = $self->build($level, $self->message(@_));
126 0           $self->logger->output($args);
127              
128             }
129              
130 0           });
131              
132             }
133              
134             # load and initialize our output mixin
135              
136 0           $self->activate();
137              
138 0           return $self;
139              
140             }
141              
142             1;
143              
144             __END__