Vous pouvez utiliser le redirecteur de flux de sortie pris en charge par la ligne de commande Windows, les coquilles * nix, par ex.
java -jar myjar.jar > output.txt
Sinon, comme vous exécutez l'application à l'intérieur de la machine virtuelle, vous pouvez rediriger System.out
à partir de Java lui-même. Vous pouvez utiliser la méthode
System.setOut(PrintStream ps)
qui remplace le flux de sortie standard, de sorte que tous les appels à System.out aller au courant que vous spécifiez. Vous pouvez le faire avant d'exécuter votre application enveloppée, par ex. appel System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("output.txt"))));
Si vous utilisez un wrapper que vous ne pouvez pas modifier, créez votre propre wrapper. Donc, vous avez wrapper FEST -> wrapper redirecteur de flux -> application testée.
Par exemple, vous pouvez mettre en œuvre une enveloppe simple comme ceci:
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);
}
}
Vous invoquez avec 3 params supplémentaires - la classe principale pour exécuter, et la sortie/erreur dirige.
il est plus susceptible d'être une solution de redirection externe par rapport à la machine virtuelle Java, comme descripteurs de fichier dans bash/sh (par exemple "app.exe> fichier.log 2> & 1"), sauf si vous utilisez une bibliothèque de journalisation configurable – bobah