App-Regather
view release on metacpan or search on metacpan
lib/App/Regather/Logg.pm view on Meta::CPAN
# -*- mode: cperl; mode: follow; -*-
#
package App::Regather::Logg;
use strict;
use warnings;
use diagnostics;
use Sys::Syslog qw(:standard :macros);
use Mail::Send;
use Sys::Hostname;
use Data::Printer caller_info => 1, class => { expand => 2 };
# https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg
use constant dpc => { info => 'ansi113',
err => 'bold ansi255 on_ansi196',
debug => 'ansi195', #grey18', #bright_yellow',
# warning => 'bold ansi237 on_ansi214', #bright_yellow',
warning => 'ansi214', #bright_yellow',
};
=pod
=encoding UTF-8
=head1 NAME
App::Regather::Logg - logging class
=head1 SYNOPSIS
use App::Regather::Logg;
my $log = new App::Regather::Logg( prognam => 'MyAppName',
foreground => $foreground_or_syslog,
colors => $wheather_to_use_term_colors );
$log->cc( pr => 'info', fm => "App::Regather::Logg initialized ... (write to syslog)" );
$log->cc( fg => 1, fm => "App::Regather::Logg initialized ... (write to STDOUT)" );
...
my $mesg = $ldap->search( filter => "(objectClass=unsearchebleThing)");
$log->logg_ldap_err( mesg => $mesg );
=head1 DESCRIPTION
This is a class to log messages.
=head1 CONSTRUCTOR
=over 4
=item B<new>
Creates a new B<App::Regather::Logg> object
=over 4
=item prognam =E<gt> 'MyAppName'
program name
=item foreground =E<gt> 1 | 0
STDOUT or syslog, default is: 0
=item colors =E<gt> 1 | 0
wheather to use terminal colors, default is: 0
if set, then priorities are colored this way:
=over 4
info => 'ansi113'
err => 'bold ansi255 on_ansi196'
debug => 'ansi195'
warning => 'bold ansi237 on_ansi214'
=back
for reference look at L<Term::ANSIColor>
=item ts_fmt =E<gt> 'strftime(3) format string'
timestamp format string, default is: "%a %F %T %Z (%z)"
=back
=back
=cut
sub new {
my ( $self, %args ) = @_;
$args{colors} = $args{colors} // 0;
$args{foreground} = $args{foreground} // 0;
$args{prognam} = $args{prognam} // lc( (split(/:/, __PACKAGE__))[0] );
$args{tsargsfmt} = '%a %F %T %Z (%z)';
eval { $args{hostname} = hostname };
$args{hostname} = 'HOSTNAME_NOT_AVAILABLE' if $@;
openlog($args{prognam}, "ndelay,pid") if ! $args{foreground};
bless { %args }, $self;
}
sub colors { shift->{colors} }
sub foreground { shift->{foreground} }
sub host_name { shift->{hostname} }
sub prognam { shift->{prognam} }
sub ts_fmt { shift->{ts_fmt} }
=head1 METHODS
=over 4
=item B<conclude>
main method to do the job
=over 4
=item fg =E<gt> 1 | 0
foreground: stdin or syslog
=item pr =E<gt> 'level[|facility]'
priority
=item fm =E<gt> "... %s ... : %m"
sprintf format string, with the addition that %m is replaced with "$!"
=item ls =E<gt> [ $a, $b, ... ]
( run in 1.250 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )