web-dev-qa-db-fra.com

Comment pouvons-nous rediriger une sortie de la console du programme Java vers plusieurs fichiers?

Comment pouvons-nous rediriger la sortie de la console Eclipse vers un fichier? Je peux:

  1. Run Configuration-> Commons-> Select a file.
  2. Utilisez System.setOut(PrintStream) et System.setErr(PrintStream).

Le problème avec 1) est que je dois enregistrer la sortie de la console dans différents fichiers au lieu d’un fichier.

Le problème avec 2) est qu’il ne stocke que la sortie de la console générée par System.out.println() ou le stacktrace d’une exception levée. Il ne capture pas d'autres types de sorties, par exemple. log4j avertissements etc.

Comment pouvons-nous rediriger par programmation la sortie de la console vers différents fichiers?

160
Ali Shah

Allez dans Exécuter en tant que et choisissez Run Configurations -> Common et dans l'entrée et la sortie standard, vous pouvez également choisir un fichier.

175
Shervin Asgari

Vous pouvez utiliser une "variable" dans le nom du fichier de sortie, par exemple:

/tmp/FetchBlock-${current_date}.txt

date actuelle:

Renvoie l'heure système actuelle au format aaaaMMjj_HHmm. Un argument optionnel peut être utilisé pour fournir un formatage alternatif. L'argument doit être un modèle valide pour Java.util.SimpleDateFormat.

Ou vous pouvez également utiliser une propriété système ou une variable env_var pour spécifier quelque chose de dynamique (vous devez en spécifier un en tant qu'argument)

11
mike32b

Vous pouvez définir la sortie de System.out par programme en procédant comme suit:

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

Modifier:

Etant donné que cette solution est basée sur un PrintStream, nous pouvons activer autoFlush, mais selon le docs :

autoFlush - Un booléen; si la valeur est true, le tampon de sortie sera vidé chaque fois qu'un tableau d'octets est écrit, qu'une des méthodes println est appelée ou qu'un caractère de nouvelle ligne ou un octet ('\ n') est écrit

Donc, si une nouvelle ligne n'est pas écrite, pensez à System.out.flush() manuellement.

(Merci Robert Tupelo-Schneck)

8
Ian2thedv

Pour résoudre le problème, j'utilise la variable $ {string_Prompt}. Il montre une boîte de dialogue de saisie lors de l'exécution de l'application. Je peux régler la date/heure manuellement dans cette boîte de dialogue.

  1. Déplacer le curseur à la fin du chemin du fichier. enter image description here

  2. Cliquez sur les variables et sélectionnez string_Prompt enter image description here

  3. Sélectionnez Appliquer et exécuter enter image description hereenter image description here

0
iOS-Developer84

Nous pouvons le faire en définissant la variable de la classe System de la manière suivante

System.setOut (nouveau PrintStream (nouveau FileOutputStream ("Chemin du fichier de sortie"))). Vous devez également fermer ou effacer la variable "out" (System.out.close () ou System.out.flush ()) pour ne pas manquer de sortie.

Source: http://xmodulo.com/how-to-save-console-output-to-file-in-Eclipse.html

0
drp