Sie können den Ausgabe-Stream-Redirector verwenden, der von der Windows-Befehlszeile unterstützt wird, * nix-Shells, z.
java -jar myjar.jar > output.txt
Alternativ können, wie Sie die App aus dem Inneren des vm laufen haben, könnten Sie System.out
aus Java selbst umleiten. Sie können die Methode
System.setOut(PrintStream ps)
der den Standard-Ausgabestrom ersetzt, so dass alle nachfolgenden Anrufe an System.out auf den Strom gehen Sie angeben. Sie können dies tun, bevor Sie Ihre umschlossene Anwendung ausführen, z. System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("output.txt"))));
Wenn Sie einen Wrapper verwenden, den Sie nicht ändern können, erstellen Sie einen eigenen Wrapper. Sie haben also FEST Wrapper -> Stream Redirector Wrapper -> getestete App.
Zum Beispiel können Sie einen einfachen Wrapper wie folgt implementieren:
public class OutputRedirector
{
/* args[0] - class to launch, args[1]/args[2] file to direct System.out/System.err to */
public static void main(String[] args) throws Exception
{ // error checking omitted for brevity
System.setOut(outputFile(args(1));
System.setErr(outputFile(args(2));
Class app = Class.forName(args[0]);
Method main = app.getDeclaredMethod("main", new Class[] { (new String[1]).getClass()});
String[] appArgs = new String[args.length-3];
System.arraycopy(args, 3, appArgs, 0, appArgs.length);
main.invoke(null, appArgs);
}
protected PrintStream outputFile(String name) {
return new PrintStream(new BufferedOutputStream(new FileOutputStream(name)), true);
}
}
Sie rufen Sie es mit 3 weiteren params - Hauptklasse zu laufen, und der Ausgang/Fehler lenkt.
es höchstwahrscheinlich eine Lösung extern in Bezug auf Java VM sein werden, wie die Umleitung Filedeskriptoren in bash/sh (zB "app.exe> file.log 2> & 1"), es sei denn, Sie verwenden eine konfigurierbare Logging-Bibliothek – bobah