Kann ich STDOUT und STDERR in eine log-Datei und auch auf dem Bildschirm in Win32-Perl?
Ich habe im Internet gesucht und gefunden haben, einige gute Lösungen für Abschlag STDOUT an 2 verschiedenen Orten. Wie eine log-Datei und auch auf dem Bildschirm zur gleichen Zeit. Hier ein Beispiel:
use IO::Tee;
my $log_filename = "log.txt";
my $log_filehandle;
open( $log_filehandle, '>>', $log_filename )
or die("Can't open $log_filename for append: $!");
my $tee = IO::Tee->new( $log_filehandle, \*STDOUT );
select $tee;
Aber diese Lösung lässt STDERR gehen nur auf den Bildschirm und ich will STDERR gehen, um sowohl den Bildschirm und auch auf den gleichen log file, STDOUT geloggt. Ist das überhaupt möglich?
Meine Aufgabe ist es, meine build-Prozess angemeldet, aber ich möchte auch sehen, es auf meine IDE-Bildschirm als üblich. Und Protokollierung der Fehlermeldungen ist genauso wichtig wie die Protokollierung der glückliche Nachrichten. Und immer die Fehler protokolliert, um eine separate log-Datei ist keine gute Lösung.
InformationsquelleAutor Kurt W. Leucht | 2009-10-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie umleiten
stderr
zustdout
an die windows-shell-Ebene von etwas wie:Sehen support-Artikel hier für das offizielle Wort.
Dann könnten Sie diese stackoverflow-Antwort zu tun
tee
von der shell aus.Es gibt ein perl-tee hier: robvanderwoude.com/tee.php, die helfen könnten, zu reduzieren-Abhängigkeiten 🙂
Ich habe gesehen, es steht geschrieben: "Vertrauen Sie nie ein Perl-Skript, die
print $_;
"InformationsquelleAutor msandiford
Benutze ich Log::Log4perl für Dinge wie diese. Es behandelt das senden der Ausgabe an mehrere Orte für Sie, einschließlich der Bildschirm, Dateien, Datenbanken oder was auch immer Sie mögen. Sobald man auch nur ein bisschen Komplex, das solltest du nicht tun, das Zeug auf Ihrem eigenen.
Statt Druck zu filehandles, geben Sie einfach Log4perl eine Nachricht und Sie zahlen den rest. Ich habe eine kurze Einführung in Mastering Perl. Es basiert auf der Log4j, und die meisten der Sachen, die Sie tun können, Log4j, die Sie tun können, Log4perl, was auch bedeutet, dass, sobald Sie es wissen, wird es eine übertragbare Fähigkeit.
Ich habe mir Log4Perl, aber es schien nicht die Antwort auf die mail für mich, weil es mir erforderlich zu drucken, um einen filehandle.
Auch, wenn Sie das Modul::Bauen Sie reden, lassen Sie uns das problem beheben. Ist deine Frage wirklich, "wie kann ich die erfassen Sie die Ausgabe von Module::Build?" Das ist alles, was ich tun in letzter Zeit. Sie können eine Unterklasse und überschreiben die log_* Methoden, das zu tun, was Sie wollen.
Mit Log4perl, Sie befassen sich nicht mit filehandles, die auf der Benutzerebene. Ich bin mir nicht sicher, was Sie bei der Suche.
Ich glaube nicht, dass ein beliebiger eindeutiger als die Antwort auf "Einige Modul druckt Nachrichten, die an STDERR. Wie kann ich den Trichter Sie zu Log::Log4perl?" in die Log4perl-FAQ. Lesen Sie es in der Log4perl-Verteilung.
InformationsquelleAutor brian d foy
Obwohl ich verwenden Log::Dispatch ausgiebig, ich habe das oben zu melden, was tatsächlich auf dem Bildschirm angezeigt, in eine Datei.
Habe nicht viel praktische Erfahrung mit der Windows-perl-Kompatibilität; ich habe es nur verwendet auf linux. Haben Sie versucht, Strawberry perl vs activestate perl? Hast du cygwin installiert?
Ich bin mit ActiveState Perl-und Eclipse-EPIC-IDE. Kein cygwin.
Scheint, dass es keine
deb
PaketPerlIO::Util
für Ubuntu 🙁InformationsquelleAutor Oesor
Weisen Sie einfach die
STDERR
filehandle ...Sollte erwähnen, dass ich diese getestet auf Windows, funktioniert es, allerdings verwende ich StrawberryPerl.
funktioniert wie ein Charme, auch mit
STDERR
. Diese Lösung sollte auf der Oberseite sein imho. Auch positiv:IO::Tee
verpackt für Ubuntu, hilft viel in die Bereitstellung auf diesen Systemen.InformationsquelleAutor glob
Ich habe keinen windows-Rechner zu testen, aber vielleicht könnten Sie etwas tun, wie eine gebunden behandeln, die Druck auf STDOUT und log umleiten von STDOUT und STDERR?
EDIT: die einzige Angst, Die ich habe, ist die Methode der Speicherung von STDOUT für die spätere Verwendung, ich habe noch eine zweite Möglichkeit für die Speicherung von STDOUT für die spätere Verwendung sollte der erste nicht funktionieren auf Windows. Beide funktionieren bei mir auf Linux.
InformationsquelleAutor Joel Berger
versuchen :
Alle print-Anweisungen, die nicht angeben, einen Datei-handle (das heißt, keine regelmäßigen Nachrichten) senden Ausgaben an die Protokolldatei an. Alle print-Anweisungen, die Verwendung der STDERR-Datei-handle (alle Fehler) senden Ausgabe auf die Konsole und log-Datei.
InformationsquelleAutor Divyanand
Du willst also
STDERR
zu Verhalten, wieSTDOUT
gehen, um sowohl den Bildschirm und die gleiche log-Datei? Kann dir nur dupSTDERR
mit(Ich weiß nicht, offhand, ob Sie würde dies tun, bevor oder nachdem der Aufruf an
IO::tee->new
).InformationsquelleAutor mob
Schrieb ich eine minimalistische perl-logger mit konfigurierbarer dynamic-Protokollierung geben Sie die folgende API:
InformationsquelleAutor Yordan Georgiev