Thread Hilfestellung bei Problem mit package
(20 answers)
Opened by jan99 at 2015-03-27 08:06
Ich muss mit meinem Package nochmal zurück kommen.
Derzeit sieht es so aus... Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 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; Darin gab es in der alten Version bereits die Funktion ->doublewrite bei welcher in Abhängigkeit von ->log neben der Bildschirmausgabe eine in eine Datei (definiert in open) erfolgt. Nun wollte ich die Bildschirmausgabe auch schaltbar machen und habe ->shell ergänzt. Die Funktionalität von ->doublewrite habe ich dann in ->write mit ->shell eingebaut. Das funktioniert auch soweit bis auf die Tatsache das beide Ausgaben im Bildschirm erfolgten. An ->open habe ich keine Änderung vorgenommen. Die Einbindung sieht wie folgt aus: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... use EBL::ebl_monitoring; # Sonderfunktionen für EBL-Einsatz use EBL::ebl_reporting; # Reportingfunktion use File::Copy qw(copy); # main-parameters my %config=( "logstatus"=>1, # soll Protokoll geschrieben werden "shellstatus"=>1, # zusätzliche Protokollausgabe Shell "active"=>0, # damit wird die Funktion (Kopiervorgang und Server stop / start scharf geschaltet) "logfilename"=>'DWG2AIMS.log', # Dateiname für die Scriptausführung "folder_source"=>'', # Quelle der DWG-Dateien ); # Reportsteuerung my $log=EBL::ebl_reporting->open($config{logfile_name}); $log->log($config{logstatus}); $log->shell($config{shellstatus}); $log->write("Starten eines MapEdit-Update (AIMS-Server)"); ... Auch wenn das Posting und alles etwas länger ist - vielleicht kann mir einer von Euch sagen wo mein Denkfehler vorliegt. Gruß Jan perl-Greenhorn - Win7 64bit / strawberry (ehem. activeperl) - www.OpenStreetMap.de
|