From 5c3309d042eb132219de39d69a1f25fea5139b65 Mon Sep 17 00:00:00 2001 From: Mercier Pierre-Olivier Date: Thu, 31 Oct 2013 16:50:04 +0100 Subject: [PATCH] New state: PENDING --- ACU/Log.pm | 75 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 57 insertions(+), 18 deletions(-) diff --git a/ACU/Log.pm b/ACU/Log.pm index 30752cc..8c67f22 100644 --- a/ACU/Log.pm +++ b/ACU/Log.pm @@ -5,6 +5,7 @@ use strict; use warnings; use Carp; use Data::Dumper; +use Email::MIME; use Exporter 'import'; use POSIX qw(strftime); use Term::ANSIColor qw(:constants); @@ -16,21 +17,26 @@ use constant { WARN => 4, DONE => 5, USAGE => 6, + PENDING => 6.5, INFO => 7, DEBUG => 8, TRACE => 9, }; -our @EXPORT = qw(log FATAL ALERT ERROR WARN DONE USAGE INFO DEBUG TRACE); +our @EXPORT = qw(log FATAL ALERT ERROR WARN DONE USAGE PENDING INFO DEBUG TRACE); our $display_level = 7; our $save_level = 9; our $fatal_error = 1; our $fatal_warn = 0; +our $mail_error = 0; our $log_file = $0.".log"; my $log_fd; +my $HOSTNAME = `hostname`; +chomp($HOSTNAME); + sub log { my $level = shift; @@ -51,15 +57,47 @@ sub log local $| = 1; print $log_fd strftime("%a %b %e %H:%M:%S %Y", localtime), " ", levelstr($level), " "; - if ($level >= TRACE) { + if ($level == TRACE) { print $log_fd Dumper(@_); } else { say $log_fd @_; } } + + if ($mail_error && $level <= ERROR) + { + require "Email::Sender::Simple"; + my $mail = Email::MIME->create( + header_str => [ + From => "Roots assistants ", + To => "Roots assistants ", + Subject => "[LERDORF][ERROR] ".join(' ', @_) + ], + body_str => "Bonjour, + +Une erreur de niveau $level est survenue sur la machine $HOSTNAME. + +Cette erreur est survenue lors de l'exécution du script : +$0. + +Voici le contenu du message d'erreur : +".join(' ', @_)." + +Cordialement, + +-- +The lerdorf project", + ); + Email::Sender::Simple::sendmail($mail); + } + if ($level <= $display_level) { - say STDERR (leveldisp($level), @_, RESET); + if ($level == PENDING) { + print STDERR (leveldisp($level), @_, RESET, "\r"); + } else { + say STDERR (leveldisp($level), @_, RESET); + } } if ($fatal_warn && $level <= WARN){ @@ -80,14 +118,14 @@ sub levelstr($) { my $level = shift; - return "FATAL" if ($level == 1); - return "ALERT" if ($level == 2); - return "ERROR" if ($level == 3); - return "WARN " if ($level == 4); - return "DONE " if ($level == 5); - return "USAGE" if ($level == 6); - return "INFO " if ($level == 7); - return "DEBUG" if ($level == 8); + return "FATAL" if ($level <= 1); + return "ALERT" if ($level <= 2); + return "ERROR" if ($level <= 3); + return "WARN " if ($level <= 4); + return "DONE " if ($level <= 5); + return "USAGE" if ($level <= 6); + return "INFO " if ($level <= 7); + return "DEBUG" if ($level <= 8); return "TRACE"; } @@ -95,14 +133,15 @@ sub leveldisp($) { my $level = shift; - return BOLD, ON_RED, YELLOW, "/!\\", RESET, " ", BOLD if ($level == 1); - return BOLD, ON_RED, ">>>", RESET, " ", BOLD if ($level == 2); - return BOLD, RED, ">>>", RESET, " ", BOLD if ($level == 3); - return BOLD, YELLOW, ">>>", RESET, " ", BOLD if ($level == 4); - return BOLD, GREEN, ">>>", RESET, " ", BOLD if ($level == 5); - return BOLD, MAGENTA, " * ", RESET, " ", BOLD if ($level == 6); + return BOLD, ON_RED, YELLOW, "/!\\", RESET, " ", BOLD if ($level <= 1); + return BOLD, ON_RED, ">>>", RESET, " ", BOLD if ($level <= 2); + return BOLD, RED, ">>>", RESET, " ", BOLD if ($level <= 3); + return BOLD, YELLOW, ">>>", RESET, " ", BOLD if ($level <= 4); + return BOLD, GREEN, ">>>", RESET, " ", BOLD if ($level <= 5); + return BOLD, MAGENTA, " * ", RESET, " ", BOLD if ($level <= 6); + return BOLD, CYAN, ">>>", RESET, " " if ($level < 7); return BOLD, CYAN, " * ", RESET, " " if ($level == 7); - return BOLD, BLUE, " % ", RESET, " " if ($level == 8); + return BOLD, BLUE, " % ", RESET, " " if ($level <= 8); return BOLD, BLUE, "#", RESET, " "; }