Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich suche nen möglichst einfachen Weg die gesammte Komandozeilenausgabe paralell dazu in ein logfile zu speichern.
Der einfachste (und bisher einzigste) Weg den ich kenne ist der Zusatzparameter "> logfile" (also "java MeinProg > logfile") aber dann fällt ja jegliche Bildschirmausgabe weg. Da ich die aber ebenfalls haben möchte brauch ich ne andere Lösung.
Kann mir einer helfen?
Der einfachste Weg ist dein Programm an das "T-Programm" zu koppeln, also
Code:
tee logfile `java MeinProg`
Du kannst auch das System.out auf einen eigenen Printer umsetzten,
der alle Ausgaben sowohl auf die Konsole als auch in deine Datei
schreibt. Dazu mußt du entweder dein Programm ändern oder es
von einem 2. Programm mit MainProg.main(...) aufrufen, daß
diese Umsetzung vornimmt.
Irgendwie kam mir dieses Kästchen mit der Aufschrift "Start" unten links schon
länger etwas merkwürdig vor ???:L
Zur Ehrenrettung:
1) Hat Floriel nicht geschrieben, was für'n BS er nutzt.
2) Wüßte ich nicht wie das in WinDoof funktioniert.
3) Habe ich im 2. Teil den Vorschlag eines selbstgeschriebenen
Java-Programms gemacht, das er dann allgemein einsetzen
kann.
Oder du schreibst dir einen eigenen PrintWriter, dem du das System.out erst gibst, damit er sich das speichern kann, danach setzt du System.out = dein Prinwriterobjekt. Und in dem schreibst du dann alles einmal in System.out und einmal in ne Datei.
Für den ersten Versuch schon mal ein Dankeschön
Aber genau den 2. Vorschlag dürftest du für mich noch mal genauer erklären, was das mit dem eigenen Printer auf sich hat.
Also wenn ich das bisher richtig verstanden habe, muss ich entweder System.out (und System.err, das soll auch ins logfile) durch was ersetzen, das dann sowohl System.out als auch das logfile schreiben ausführt, oder ich schreibe ein Zweites Prog außenrum, dass die Ausgaben eigenständig handhabt und praktisch das gleiche macht?
Die zweite Variante hätte den Vorteil, daß du den Quelltext deines MeinProg.java nicht
ändern müßtest und noch nichtmal den Quelltext des umzuleitenden Programms
braucht.
Es muß ein PrintStream sein, denn System.out ist ja auch einer.
Hier mal ein Beispielcode
Code:
import java.io.*;
public class Tee extends PrintStream {
PrintStream konsole = System.out;
public Tee(String logfileName) throws Exception {
super(new FileOutputStream(logfileName));
}
public void write(byte[] buf, int off, int len) {
konsole.write(buf, off, len);
super.write(buf, off, len);
}
public static void main(String[] args) throws Exception {
if (args.length < 2)
System.out.println("usage: java Tee <logfile> <javaProgramm>");
else {
PrintStream tee = new Tee(args[0]);
System.setOut(tee);
System.out.print(6*7);
System.out.println(" und weg...");
// Hier mittels getClassByName die main-Methode des Programm args[1] starten
}
}
}