
hacksics
Novice
Jan 20, 2009, 7:18 PM
Post #6 of 13
(1079 views)
|
|
Re: [FishMonger] Using variables for file handle
[In reply to]
|
Can't Post
|
|
I just wanted to write a module for log writing purposes. When I create a log writer objects, if I use the same file handle I guess it will be a problem if I write several log files in my program. Please find my module below
package LogWriter; use strict; no strict 'refs'; sub new { my($class) = $_[0]; my $self = {}; $self->{'FILE_NAME'} = $_[1]; my @arrTmp = split('/', $_[1]); my($strFileHandleName) = split('\.', $arrTmp[$#arrTmp]); $self->{'FILE_HANDLE'} = $strFileHandleName; my $strDate = DateStr2(); $self->{'HEADING'} = "File name : $arrTmp[$#arrTmp]\n" ."Date Stamp: $strDate\n"; $self->{'DEBUG'} = "TRUE"; my @arrStack = (); $self->{'STACK'} = \@arrStack; $self->{'FUNC_CALL'} = {}; $self->{'FUNC_TAG'} = "00000"; bless($self, $class); return $self; } sub LogHeading { my($self, $heading) = @_; return $self->{'HEADING'} if (! $heading); $self->{'HEADING'} = $heading; return $heading; } sub LowLevelDebug { my($self, $debug) = @_; return $self->{'DEBUG'} if (! $debug ); $self->{'DEBUG'} = $debug; return $debug; } sub LogOpen { my($self) = @_; my $Filename = $self->{'FILE_NAME'}; my $FileHandle = $self->{'FILE_HANDLE'}; chomp($FileHandle); print "$Filename $FileHandle \n"; my $TimeNow = $self->DateStr2(); if (-e "$Filename") { `/usr/bin/mv $Filename $Filename.$TimeNow`; } if ( ! open($FileHandle, ">$Filename")) { print "\nERROR: Cannot open log file [$Filename]\n\n"; exit(1); } print $FileHandle $self->{'HEADING'}; } sub DateStr2 { my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); my $DateStr = sprintf("%04d_%02d_%02d_%02d_%02d_%02d", ($year + 1900), ($mon + 1), $mday, $hour, $min ,$sec); return $DateStr; } sub Tabs { my($self) = @_; my $count = scalar(@{$self->{'STACK'}}); for (my $i = 1; $i < $count; $i++) { print $self->{'FILE_HANDLE'} ("\t"); } } sub NewLogTag { my($self, $FunctionName) = @_; my $FH = $self->{'FILE_HANDLE'}; my @CallStack = @{$self->{'STACK'}}; my %LogTagVal = %$self->{'FUNC_CALL'}; push(@CallStack, "$FunctionName"); $self->Tabs(); print $FH ("[FUNC:$FunctionName]\n"); $self->Tabs(); print $FH ("[CTACK:Global"); foreach my $func (@CallStack) { print $FH (" >> $func"); } print $FH ("]\n"); $self->Tabs(); print $FH ("{\n"); if ( ! defined $LogTagVal{"$FunctionName"}) { $LogTagVal{"$FunctionName"} = 1; } else { $LogTagVal{"$FunctionName"} ++; } my $tempval = $LogTagVal{"$FunctionName"}; $self->{'FUNC_TAG'} = sprintf("FUNCALLNO:%04d", $tempval); } sub EndLogTag { my($self) = @_; my $FH = $self->{'FILE_HANDLE'}; my @CallStack = @{$self->{'STACK'}}; $self->Tabs(); print $FH ("}\n"); pop(@CallStack); } sub Log { my($self, $text, $line) = @_; my $FH = $self->{'FILE_HANDLE'}; chomp($text); print $FH ("~|$line|$text\n"); } sub LogText { my($self, $text, $line) = @_; my $LogTag = $self->{'FUNC_TAG'}; my $FH = $self->{'FILE_HANDLE'}; my $TimeNow = $self->DateStr2(); $self->Tabs(); print $FH ("\t~$TimeNow [TEXT]|$LogTag|LINE:$line|$text\n"); } sub LogWarn { my($self, $text, $line) = @_; my $LogTag = $self->{'FUNC_TAG'}; my $FH = $self->{'FILE_HANDLE'}; my $TimeNow = $self->DateStr2(); $self->Tabs(); print $FH ("\t~$TimeNow [WARN]|$LogTag|LINE:$line|$text\n"); } sub LogInfo { my($self, $text, $line) = @_; my $LogTag = $self->{'FUNC_TAG'}; my $FH = $self->{'FILE_HANDLE'}; if($self->{'DEBUG'} eq "TRUE") { my $TimeNow = $self->DateStr2(); $self->Tabs(); print $FH ("\t~$TimeNow [INFO]|$LogTag|LINE:$line|$text\n"); } } sub LogError { my($self, $text, $line) = @_; my $LogTag = $self->{'FUNC_TAG'}; my $FH = $self->{'FILE_HANDLE'}; my $TimeNow = $self->DateStr2(); $self->Tabs(); print $FH ("\t~$TimeNow [EROR]|$LogTag|LINE:$line|$text\n"); } sub LogClose { my($self) = @_; my $FH = $self->{'FILE_HANDLE'}; close($FH); }
|