Comment rediriger une sortie de console de programme Java vers plusieurs fichiers?

161

Comment 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 stocke uniquement la sortie de console générée par System.out.println()ou stacktrace d'une exception levée. Il ne capture pas d'autres types de sorties, par exemple les avertissements log4j, etc.

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

Ali Shah
la source
1) Peut-être devriez-vous utiliser "Variables .." (ex) C: \ test $ {???: ??}.
Txt
2
Voici une idée. Écrivez votre propre plugin eclipse (c'est-à-dire un bouton Cusotm) qui attribuerait une valeur aléatoire mais unique à une variable (appelée ${NAME}), puis ferait la même chose que run. Ensuite, utilisez $NAMEcomme valeur pour le fichier de sortie. peut être?
One Two Three

Réponses:

176

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

Shervin Asgari
la source
106
Je trouve absolument hilarant que 40 personnes aient voté pour un copier-coller de la deuxième ligne de la question.
AnthonyW
13
@AnthonyW Je pense que c'est principalement parce que les gens sont amenés ici par la question du titre qui est "Comment pouvons-nous rediriger la sortie d'éclipse vers un fichier". Cette réponse est en fait une réponse à la question du titre.
Gerome Bochmann
1
Si vous ne trouvez pas "Exécuter les configurations", en utilisant Eclipse 4.4 (Luna), j'ai ouvert ma configuration de lancement (en double-cliquant sur le serveur dans l'onglet Serveurs), cliqué sur "Ouvrir la configuration de lanuch", puis je suis allé dans l'onglet Commun . Dans la moitié inférieure de cette boîte de dialogue, il y a une section intitulée «Entrée et sortie standard». Ici, je pourrais cliquer sur Fichier et lui donner un nom de fichier.
Guy Schalnat
1
Astuce: ouvrez un terminal echo $TTYet spécifiez ce qu'il renvoie comme fichier. Ensuite, le terminal reflétera ce qui se trouve dans votre console Eclipse.
Sridhar Sarnobat
2
Quoi? Cette réponse est incorrecte lorsque l'on lit attentivement la question de l'interrogateur.
ComputerScientist
11

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 facultatif peut être utilisé pour fournir une mise en forme alternative. L'argument doit être un modèle valide pour java.util.SimpleDateFormat.

Ou vous pouvez également utiliser un system_property ou un env_var pour spécifier quelque chose de dynamique (l'un ou l'autre doit être spécifié comme arguments)

mike32b
la source
8

Vous pouvez définir la sortie de System.out par programme en faisant:

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

Éditer:

Du fait que cette solution est basée sur a PrintStream, nous pouvons activer autoFlush, mais selon la documentation :

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

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

(Merci Robert Tupelo-Schneck)

Ian2thedv
la source
1
Il semble que vous deviez également fermer avec System.out.flush()pour éviter de manquer une sortie.
Robert Tupelo-Schneck
1

Pour résoudre le problème, j'utilise la variable $ {string_prompt}. Il affiche une boîte de dialogue d'entrée lorsque l'application s'exécute. Je peux régler la date et l'heure manuellement dans cette boîte de dialogue.

  1. Déplacez le curseur à la fin du chemin du fichier. entrez la description de l'image ici

  2. Cliquez sur les variables et sélectionnez string_prompt entrez la description de l'image ici

  3. Sélectionnez Appliquer et exécuter entrez la description de l'image ici entrez la description de l'image ici

Développeur iOS84
la source
0

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

System.setOut (nouveau PrintStream (nouveau FileOutputStream ("Path to output file"))). Vous devez également fermer ou vider la variable «out» (System.out.close () ou System.out.flush ()) afin de ne pas manquer une sortie.

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

drp
la source