2 Stimmen

Fehlerstrom in Datei und Konsole unter Windows umleiten

Ich möchte den Fehlerstrom von der Java-Konsolenanwendung in eine Datei und die Konsole umleiten. In der normalen Situation wird der Fehler nur in der Konsole angezeigt. Ich möchte, dass er in der Konsole und in der Datei angezeigt wird. Wie kann ich das erreichen? Wenn ich schreibe:

java -classpath lib.jar com.hertz.test.Blad 2>error.log

Dann werden die Fehler in eine Datei umgeleitet, aber ich sehe sie nicht auf der Konsole. Weiß jemand, wie man in dieser Situation Datum und Uhrzeit zu den Protokollen hinzufügen kann?

Ich arbeite mit Windows 2003 Server.

3voto

JdeBP Punkte 2016

Dies ist natürlich eine einfache Übung, um die Ausgabe durch einen Filter zu leiten, in diesem Fall den tee Befehl, der in Microsofts Befehlsinterpreter ähnlich wie in JP Softwares TCC/LE und den (nicht zur C-Shell-Familie gehörenden) Unix-Shells ausgeführt wird:

java -classpath lib.jar com.hertz.test.Blad 2>&1 | tee error-and-output.log

Die unterschiedliche Behandlung der Standardausgabe und des Standardfehlers ist kaum mehr als eine Übung in der Umleitungssyntax, für die dieses Beispiel hier nur eine von mehreren Möglichkeiten ist, und ist eine separate Frage.

java -classpath lib.jar com.hertz.test.Blad 2>&1 1>con | tee error.log

Alles was bleibt, ist die Beschaffung eines tee Befehl. Es gibt mehrere Möglichkeiten:

  • Verwenden Sie einen Port eines Unix tee comando. Es gibt mehrere Möglichkeiten. Oft genannt werden GNUWin32 , cygwin y unxutils . Weniger bekannt, aber in mancher Hinsicht besser, sind die Werkzeuge im SFUA-Werkzeugkasten , die im Subsystem für UNIX-basierte Anwendungen die bereits im Lieferumfang von Windows 7 Ultimate Edition und Windows Server 2008 R2 enthalten ist. (Für Windows XP und Windows Server 2003 kann man herunterladen und installieren Dienste für UNIX Version 3.5 .) Dieses Toolkit verfügt über eine große Anzahl von Befehlszeilen-TUI-Tools, von mv y du durch die Korn- und C-Shells, um perl y awk . Es ist sowohl in den Varianten x86-64 und IA64 als auch in x86-32 erhältlich. Die Programme laufen in der nativen POSIX-Umgebung von Windows und nicht mit Emulator-DLLs (wie z. B. cygwin1.dll ), die Dinge über Win32 schichten. Und ja, das Toolkit hat tee sowie rund 300 weitere.
  • Verwenden Sie eine der vielen nativen Win32 tee Befehle, die Menschen geschrieben und veröffentlicht haben. Eine davon ist Ritchie Lawrence's MTEE die, wie Sie sehen können, eine /D y /T Optionen, um Zeit- und Datumsstempel zu jeder Zeile hinzuzufügen, die es verarbeitet.
  • Verwenden Sie einen Ersatz-Befehlsinterpreter, der über eine eingebaute TEE comando. TCC/LE von JP Software ist eine solche. TCC/LE hat eine eingebaute TEE Befehl . Wie Sie sehen können, hat es auch /D y /T Optionen, um Zeit- und Datumsstempel zu jeder Zeile hinzuzufügen, die es verarbeitet.

Nebenbei bemerkt: Es ist besser, wenn Ihre Anwendung die Datums- und Zeitstempel selbst hinzufügt, als wenn sie von der TEE Befehl. Aus verschiedenen Gründen, die sowohl damit zusammenhängen, wie sich Anwendungen verhalten, wenn ihre Standard-Streams Pipes sind, als auch damit, wie Pipes funktionieren, wird nicht unbedingt jede Zeile der Ausgabe von TEE zu dem Zeitpunkt, zu dem Ihre Anwendung sie überhaupt erst erzeugt hat. Der Spielraum wirkt sich sowohl auf die relative (zueinander) als auch auf die absolute (zur Wanduhr) Genauigkeit der Zeitstempel aus, die Sie sehen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X