package Log4TA; use constant SCRIPT_NAME => "log4ta.pm"; use constant SCRIPT_VERSION => "1.1.0"; require Exporter; our @ISA =qw(Exporter); our @EXPORT =qw( Log_SetOutDir Log_SetOutFile Log_SetLogLevel Log_SetLogLevelScreen Log_SetLogLevelFile Log_SetLogFileDateStyle Log_GetDateAndTime Log_Trace Log_Debug Log_Info Log_Warn Log_Error Log_Fatal ); # Log levels # 1: TRACE # 2: DEBUG # 3: INFO # 4: WARN # 5: ERROR # 6: FATAL # Log file output # Date format style # 0: No date # 1: Long date format: DD.MM.YYYY hh:mm:ss # private globals my $priv_out_dir = "log"; my $priv_out_file = "_log.txt"; my $priv_log_level_screen = 3; my $priv_log_level_file = 1; my $priv_log_file_date_style = 1; my $priv_lock_set = 0; my $priv_lock_write = 0; sub Log_SetOutDir { my ($dir) = @_; if(! $priv_lock_set and defined $dir and $dir ne "") { $priv_out_dir = $dir; return 1; } return 0; } sub Log_SetOutFile { my ($file) = @_; if(! $priv_lock_set and defined $file and $file ne "") { $priv_out_file = $file; return 1; } return 0; } sub Log_SetLogLevel { my ($level) = @_; if(! $priv_lock_set and defined $level and $level > 0) { my $ret = 1; $ret &= Log_SetLogLevelScreen($level); $ret &= Log_SetLogLevelFile($level); return $ret; } return 0; } sub Log_SetLogLevelScreen { my ($level) = @_; if(! $priv_lock_set and defined $level and $level > 0) { $priv_log_level_screen = $level; return 1; } return 0; } sub Log_SetLogLevelFile { my ($level) = @_; if(! $priv_lock_set and defined $level and $level > 0) { $priv_log_level_file = $level; return 1; } return 0; } sub Log_SetLogFileDateStyle { my ($style) = @_; if(! $priv_lock_set and defined $style and $style >= 0) { $priv_log_file_date_style = $style; return 1; } return 0; } # ------------------------------------------------------------------------------------------------- # Log_Trace # Get all log events for the time stamp events. # ------------------------------------------------------------------------------------------------- sub Log_Trace { my ($info) = @_; LogPriv("TRACE", 1, $info); } sub Log_Debug { my ($info) = @_; LogPriv("DEBUG", 2, $info); } sub Log_Info { my ($info) = @_; LogPriv("INFO", 3, $info); } sub Log_Warn { my ($info) = @_; LogPriv("WARN", 4, $info); } sub Log_Error { my ($info) = @_; LogPriv("ERROR", 5, $info); } sub Log_Fatal { my ($info) = @_; LogPriv("FATAL", 6, $info); } # ------------------------------------------------------------------------------------------------- # LogPriv # Get all log events for the time stamp events. # ------------------------------------------------------------------------------------------------- sub LogPriv { my ($type, $level, $info) = @_; my $str_screen, my $str_file; if($level >= $priv_log_level_screen) { $str_screen = "[$type] $info\n"; print $str_screen; } if($level >= $priv_log_level_file) { my $date_str = ""; if($priv_log_file_date_style == 1) { $date_str = Log_GetDateAndTime() . " "; } $str_file = $date_str . "[$type] $info\n"; LogToFile($str_file); } if(! $priv_lock_set) { $priv_lock_set = 1; } } # ------------------------------------------------------------------------------------------------- # LogToFile # Get all log events for the time stamp events. # ------------------------------------------------------------------------------------------------- sub LogToFile { my ($str) = @_; my $write_handle; if($priv_lock_write) { # append to existing log file $write_handle = ">>$priv_out_dir\\$priv_out_file"; } else { # create output directory if(! -d $priv_out_dir) { mkdir $priv_out_dir; } # create new log file $write_handle = ">$priv_out_dir\\$priv_out_file"; $priv_lock_write = 1; } open(writefile, $write_handle) or die "\nERROR cannot write log file '$write_handle'!\n"; print writefile $str; close writefile; } # ------------------------------------------------------------------------------------------------- # Log_GetDateAndTime # Returns current date and time. # ------------------------------------------------------------------------------------------------- sub Log_GetDateAndTime { my ($sec, $min, $hour, $day, $mon, $year) = localtime(time); $mon += 1; # increase month, cause it starts with 0! $year += 1900; # add 1900, cause number of years since 1900 are returned return sprintf("%02d.%02d.%04d %02d:%02d:%02d", $day, $mon, $year, $hour, $min, $sec); } return 1;