Schrift
[thread]13085[/thread]

Logbuch in Perl-Modul mitschreiben

Leser: 3


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Gast Gast
 2009-01-31 13:13
#118544 #118544
Hallo,

ich verwende fuer verschiedene Perl Programme, die als Daemon laufen, folgenden Schnipsel um ein Logbuch mit verschiedenen Werten des Programms zu erhalten:

open(LOG1, ">>$mypfad/protokoll";
open(STDOUT, ">>&LOG1");
print '************ '.$program.' Gestartet: '.time()."\n";
.......
print ........

Das funktioniert auch super und hat sich lange bewaehrt.

Nun befasse ich mich erstmalig mit der Modul-Programmierung.

Dabei moechte ich das gleiche in einem Modul einbauen, das bei jedem Modulaufruf eine eigene Datei verwendet (deshalb > statt vorher >>).

open(LOG1, ">$mypfad/protokoll.time()";
open(STDOUT, ">&LOG1");
print '************ '.$program.' Gestartet: '.time()."\n";
.......
print ........

Aber immer wenn ich diese 3 Zeilen in das Modul einbaue dann funktioniert es nicht mehr. Ich bekomme im error_log nur den Hinweis:

Name "DocSend2::LOG1" used only once: possible typo at main line 24

Aber da das ja nur eine Warning ist, duerfte es kein wirkliches Problem sein. Die Rechte fuer den Ordner in den die Logdatei geschrieben werden soll sind auf 777 gesetzt

Jedenfalls bricht das Modul immer ab (und ich kann nicht herausfinden wo oder weshalb) und wird nicht ausgefuehrt und es wird auch nichts in den entsprechenden Ordner fuer die Logdateien geschrieben.

Hat jemand eine Idee, wie ich da weiterkommen kann?
Ich finde aber auch keinen Fehler in diesen drei Zeilen und habe keine Ahnung, was da schief laufen koennte.

Christian
pq
 2009-01-31 15:16
#118545 #118545
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ein open() solltest du immer abfangen, es könnte ja fehlschlagen.
Code (perl): (dl )
open FH, '>', $filename or die "Could not open '$filename': $!";


und als anregung für modernes perl solltest du mal diesen artikel lesen:
Wiki:WasIsteinLexikalischerFileHandle
filehandles können in perl schon seit einiger zeit ganz normale variablen sein, was die
programmierung sauberer macht, weil sie dann sie z.b. den regeln von strict unterliegen. du
kennst strict nicht? dann auch noch das hier lesen: Wiki:UseStrict
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
murphy
 2009-02-01 00:01
#118549 #118549
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Gast+2009-01-31 12:13:00--
[...]
Code (perl): (dl )
open(LOG1, ">$mypfad/protokoll.time()";
[...]


Ich wuerde es ja mal mit
Code (perl): (dl )
open LOG1, '>', "$mypfad/protokoll." . time or die "Couldn't open log: $!\n";

versuchen.

Jedenfalls sagt mir meine Glaskugel, dass Du eigentlich nicht die Zeichenkette "time()" am Ende des Logdateinamens stehen haben willst, sondern eine Zeitangabe. So ein komischer Dateiname mit Klammern drin kann auch auf manchen Dateisystemen Probleme verursachen.

Dass man ausser in Spezialfaellen stets die Dreiargumentform von open verwenden und gruendsaetzlich immer den Rueckgabewert pruefen sollte, versteht sich von selbst und wurde auch bereits von pq erwaehnt.


@pq: Lexikalische Filehandles sind zwar eine feine Sache, aber das Umleiten anderer Filehandles mit der vom OP verwendeten Syntax geht, soweit ich weiss, nur mit "klassischen" Filehandles.
When C++ is your hammer, every problem looks like your thumb.
pq
 2009-02-01 03:23
#118553 #118553
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
murphy+2009-01-31 23:01:14--
@pq: Lexikalische Filehandles sind zwar eine feine Sache, aber das Umleiten anderer Filehandles mit der vom OP verwendeten Syntax geht, soweit ich weiss, nur mit "klassischen" Filehandles.

Code (perl): (dl )
1
2
3
open my $log, ">", "/tmp/umleitung" or die $!;
open STDERR, ">&", $log or die $!;
warn "test";

geht hier wunderbar =)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
barney
 2009-02-01 12:36
#118554 #118554
User since
2008-08-31
130 Artikel
BenutzerIn
[Homepage] [default_avatar]
Jetzt noch die obligatorische Frage: Was spricht gegen die Verwendung von Log::Log4perl ?
murphy
 2009-02-01 14:07
#118556 #118556
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
@pq: Da hatte ich wohl etwas falsch im Kopf. Danke fuer das Gegenbeispiel :-)
When C++ is your hammer, every problem looks like your thumb.
Linuxer
 2009-02-01 20:02
#118564 #118564
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Wieder mal kein Hinweis darauf, dass es ein Crosspost ist:

http://www.perlboard.de/cgi-bin/perlboard.pl?actio...
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
pq
 2009-02-02 11:37
#118572 #118572
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
hier auch noch eins: http://www.wer-weiss-was.de/app/archive/show/49907...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
murphy
 2009-02-02 13:53
#118579 #118579
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Unser Board braucht mal eine automatische Crossposterkennung, das nimmt in letzter Zeit echt Ueberhand ;-)
When C++ is your hammer, every problem looks like your thumb.
renee
 2009-02-02 14:07
#118581 #118581
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@murphy: haben wir schon. Der Crossposterkennungsbot heißt Linuxer ;-)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2009-01-31 13:13.