Wie können wir eine Java-Programmkonsolenausgabe in mehrere Dateien umleiten?

161

Wie können wir die Ausgabe der Eclipse-Konsole in eine Datei umleiten? Ich kann:

  1. Run Configuration-> Commons-> Select a file.
  2. Verwenden Sie System.setOut(PrintStream)und System.setErr(PrintStream).

Das Problem mit 1) ist, dass ich die Konsolenausgabe in verschiedene Dateien anstatt in eine Datei aufzeichnen muss.

Das Problem mit 2) ist, dass nur die Konsolenausgabe gespeichert wird, die durch System.out.println()eine ausgelöste Ausnahme oder eine Stapelverfolgung generiert wurde . Andere Arten von Ausgaben, z. B. log4j-Warnungen usw., werden nicht erfasst.

Wie können wir die Konsolenausgabe programmgesteuert in verschiedene Dateien umleiten?

Ali Shah
quelle
1) Vielleicht sollten Sie "Variablen .." (ex) C: \ test $ {???: ??}. Txt
Cloverink
2
Hier ist eine Idee. Schreiben Sie Ihr eigenes Eclipse-Plugin (z. B. eine Cusotm-Schaltfläche), das einer Variablen (aufgerufen ${NAME}) einen zufälligen, aber eindeutigen Wert zuweist und dann dasselbe wie run ausführt . Verwenden Sie dann $NAMEals Wert für die Ausgabedatei. vielleicht?
Eins Zwei Drei

Antworten:

176

Gehen Sie zu Ausführen als und wählen Sie Run Configurations-> Commonund in der Standardeingabe und -ausgabe können Sie auch eine Datei auswählen.

Shervin Asgari
quelle
106
Ich finde es absolut witzig, dass 40 Leute ein Copy-Paste aus der zweiten Zeile der Frage positiv bewertet haben.
AnthonyW
13
@AnthonyW Ich denke, das liegt hauptsächlich daran, dass die Leute hier von der Titelfrage geleitet werden: "Wie können wir die Eclipse-Ausgabe in eine Datei umleiten?". Diese Antwort ist in der Tat eine Antwort auf die Titelfrage.
Gerome Bochmann
1
Wenn Sie mit Eclipse 4.4 (Luna) "Konfigurationen ausführen" nicht finden können, habe ich meine Startkonfiguration geöffnet (durch Doppelklicken auf den Server auf der Registerkarte Server), auf "Lanuch-Konfiguration öffnen" geklickt und bin dann zur Registerkarte "Allgemein" gewechselt . In der unteren Hälfte dieses Dialogfelds befindet sich ein Abschnitt mit dem Namen "Standardeingabe und -ausgabe". Hier könnte ich auf Datei klicken und ihm einen Dateinamen geben.
Guy Schalnat
1
Tipp: Öffnen Sie ein Terminal echo $TTYund geben Sie an, was es als Datei zurückgibt. Dann spiegelt das Terminal die Inhalte Ihrer Eclipse-Konsole wider.
Sridhar Sarnobat
2
Was? Diese Antwort ist falsch, wenn Sie die Frage des Fragestellers sorgfältig lesen.
ComputerScientist
11

Sie können eine "Variable" im Ausgabedateinamen verwenden, zum Beispiel:

/tmp/FetchBlock-${current_date}.txt

aktuelles Datum:

Gibt die aktuelle Systemzeit zurück, die als yyyyMMdd_HHmm formatiert ist. Ein optionales Argument kann verwendet werden, um eine alternative Formatierung bereitzustellen. Das Argument muss ein gültiges Muster für java.util.SimpleDateFormat sein.

Sie können auch eine system_property oder eine env_var verwenden, um etwas Dynamisches anzugeben (entweder muss eines als Argument angegeben werden).

mike32b
quelle
8

Sie können die Ausgabe von System.out programmgesteuert einstellen, indem Sie Folgendes tun:

System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("/location/to/console.out")), true));

Bearbeiten:

Aufgrund der Tatsache, dass diese Lösung auf a basiert PrintStream, können wir autoFlush aktivieren, aber gemäß den Dokumenten :

autoFlush - Ein Boolescher Wert; Wenn true, wird der Ausgabepuffer geleert, wenn ein Byte-Array geschrieben, eine der println-Methoden aufgerufen oder ein Zeilenumbruchzeichen oder Byte ('\ n') geschrieben wird

Wenn also keine neue Zeile geschrieben wird, denken Sie daran, dies System.out.flush()manuell zu tun.

(Danke Robert Tupelo-Schneck)

Ian2thedv
quelle
1
Es scheint, dass Sie auch mit schließen müssen, System.out.flush()um zu vermeiden, dass möglicherweise eine Ausgabe fehlt.
Robert Tupelo-Schneck
1

Um das Problem zu lösen, benutze ich die Variable $ {string_prompt}. Es wird ein Eingabedialog angezeigt, wenn die Anwendung ausgeführt wird. In diesem Dialogfeld kann ich Datum und Uhrzeit manuell einstellen.

  1. Bewegen Sie den Cursor am Ende des Dateipfads. Geben Sie hier die Bildbeschreibung ein

  2. Klicken Sie auf Variablen und wählen Sie string_prompt aus Geben Sie hier die Bildbeschreibung ein

  3. Wählen Sie Übernehmen und Ausführen Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

iOS-Developer84
quelle
0

Wir können dies tun, indem wir die Variable der Systemklasse folgendermaßen festlegen

System.setOut (neuer PrintStream (neuer FileOutputStream ("Pfad zur Ausgabedatei"))). Außerdem müssen Sie die Variable 'out' (System.out.close () oder System.out.flush ()) schließen oder leeren, damit Ihnen keine Ausgabe fehlt.

Quelle: http://xmodulo.com/how-to-save-console-output-to-file-in-eclipse.html

drp
quelle