# ****************************************************** # * # * Name: AppLog.pm # * # * Design Phase: # * Author: John Miner # * Date: 05/10/2012 # * Purpose: Logging to file and event logs. # * # ****************************************************** # # Class Usage # # 1.0 Must set properties first # 2.0 Call Write() # 3.0 If not sucess or information event, log to app event log # 4.0 Log to local txt file with date time stamp # My package name package AppLog; # Declare all variables use strict; use warnings; # Use WIN32 OLE package use Win32::OLE; require Exporter; our @ISA = qw(Exporter); # # Internals # # Each event has a type my %Type = ( "SUCCESS" => 0, "ERROR" => 1, "WARNING" => 2, "INFORMATION" => 4, "AUDIT_SUCCESS" => 8, "AUDIT_FAILURE" => 16 ); # Data element 1 my $FileName = ''; # Data element 2 my $AppName = ''; # Data element 3 my $Message = ''; # Data element 4 my $Event = ''; # # Properties # # Set file name sub SetFileName { my ($var) = @_; $AppLog::FileName = $var; return; } # Set app name sub SetAppName { my ($var) = @_; $AppLog::AppName = $var; return; } # Set message sub SetMessage { my ($var) = @_; $AppLog::Message = $var; return; } # Set event type sub SetEvent { my ($var) = @_; $AppLog::Event = $var; return; } # # Methods # # Write 2 file or 2 event log sub Write { # Write to system event log (errors) if (($AppLog::Event eq "ERROR") || ($AppLog::Event eq "WARNING")) { WriteToEvtLog(); } # Write to local text file log (non-errors) WriteToTxtFile(); # Just exit return; }; # Write to event log sub WriteToEvtLog { # Use scripting library my ($app) = Win32::OLE->new('WScript.Shell', sub {$_[0]->Quit;}); # Create the string my $Line = $AppLog::AppName . ' - ' . $AppLog::Message; # Write out msg $app->LogEvent($Type{$AppLog::Event}, $Line); # Release memory undef $app; # Just exit return; }; # Write to log file sub WriteToTxtFile { # Open the text file open(OUT, ">>$AppLog::FileName"); # Create the string my @aryData = localtime(time); my $Line = ''; $Line .= (1900 + $aryData[5]) . '-'; $Line .= (1 + $aryData[4]) . '-'; $Line .= $aryData[3] . ' '; $Line .= $aryData[2] . ':'; $Line .= $aryData[1] . ':'; $Line .= $aryData[0] . ' - '; $Line .= $AppLog::Message; # Write string print OUT $Line, "\n"; # Close the file close(OUT); # Just exit return; }; # http://search.cpan.org/~jdb/Win32-OLE-0.1709/lib/Win32/OLE.pm#Methods # Last line has to be true (1)! 1;