package EBL::ebl_reporting; use strict; use warnings; use IO::File; #use Time::localtime; require Time::localtime; sub open { my $class=shift; my $log_file=shift; # Referenz auf STDOUT my $fh=\*STDOUT; # wenn object und kein File => neuer Name = alter Name if(ref $class && !$log_file) { $log_file=$class->{file}; $class->{fh}->close(); } # versuchen Fh zu öffnen if($log_file) { my $ofh=IO::File->new(); my $mode='>'; $mode='>>' if( ref $class ); if($ofh->open($log_file,$mode) ) { $fh=$ofh; } else { $fh->print("ERROR open $log_file ($!)\nwrite to STDOUT\n"); } } # objektwerte neu setzen wenn objekt if( ref $class ) { $class->{fh}=$fh; $class->{file}=$log_file; return $class; } # neues Objekt return bless({ fh=>$fh, file=>$log_file, on=>1 },$class); } # log(1) => logging an # log(0) => logging aus # log() => aktueller Status sub log { my $self=shift; $self->{on}=shift() if(@_); return $self->{on}; } # shell(1) => zusätzliche Shell-Ausgabe an # shell(0) => zusätzliche Shell-Ausgabe aus # shell() => aktueller Status sub shell { my $self=shift; $self->{on}=shift() if(@_); return $self->{on}; } # filename sub file { shift->{file}; } # filehandle sub fh { shift->{fh}; } # write to file mit optionaler Ausgabe auf die Shell sub write { $_[0]->fh->print($_[1]."\n") if($_[0]->log()); print($_[1]."\n") if($_[0]->shell()); } # write to file and screen sub doublewrite { $_[0]->fh->print($_[1]."\n") if($_[0]->log()); print($_[1]."\n") } # close filehandle sub close { shift->fh->close(); } # wahr wenn Datei geöffnet sub opened { shift->fh->opened(); } 1;