Logfile fuer ein Programm schreiben

Hallo.

ich habe das sicherlich schon hundertmal gemacht und es hat immer einwandfrei funktioniert (auch mehrere Scripts auf dem gleichen Rechner):

#!/usr/bin/perl
use strict;
use warnings;

$|=1;
my $protdir = ".......Pfad und Dateiname";
open(LOG1, "\>\>$protdir");
open(STDOUT, "\>\>&LOG1");
open(STDERR, "\>\>&LOG1");
print LOG1 "\*\*\*\*\*\*\*\*\*\*\*\* Gestartet\n";
while(1)
 { 
 print LOG1 time()."\n";
 sleep 60;
 }

In der Variablen $protdir ist der komplette Pfad und Dateiname gespeichert.

Wie geschrieben: Ich habe das schon zig Mal genauso eingesetzt und es hat immer funktioniert - ausser bei meinem neuesten Prograemmchen.

Mal wird etwas in die Logfile geschrieben, mal wird sie nur mit 0 Groesse angelegt, aber nichts reingeschrieben.
Der Start erfolgt immer direkt vom User von der Konsole.
Perl ist 5.8

Obwohl das $|=1; je bedeutet, dass alles sofort geschrieben wird.
Kille ich dann das Programm, sind die Daten ploetzlich in der Protokoll-Datei vorhanden (selbst wenn es vorher ueber eine Stunde gelaufen ist).

Ich bin total verweifelt und weiss nicht wo ich noch suchen koennte oder an was es ueberhaupt liegen koennte.

Hat jemand eine Idee?

Christian

Hi,

mit

$|=1;

steuerst du nur das Flush-Verhalten von STDOUT, nicht von deinem Stream LOG1.

Das ist aber auch egal, weil die Output-Streams standardmäßig „line-buffered“ sind und dadurch durch dein „\n“ ein flush() getriggert wird.

Mir ist zwar auch schleierhaft, warum das so nicht funktioniert (ich weiß nur, dass ich so keine Logs schreiben würde sonden mit dem Logger-Paket), aber kannst du das LOG1 bei dem print bitte mal weg lassen und auf STDOUT schreiben? Das hast du ja umgeleitet, ich möchte mal sehen ob das was ändert :wink:.

-nik