¿Cómo podemos redirigir la salida de la consola de un programa Java a varios archivos?

161

¿Cómo podemos redirigir la salida de la consola eclipse a un archivo? Puedo:

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

El problema con 1) es que necesito grabar la salida de la consola en diferentes archivos en lugar de un solo archivo.

El problema con 2) es que solo almacena la salida de la consola generada por System.out.println()o stacktrace de una excepción lanzada. No captura otro tipo de salidas, por ejemplo, advertencias log4j, etc.

¿Cómo podemos redirigir la salida de la consola a diferentes archivos mediante programación?

Ali Shah
fuente
1) Tal vez debería usar "Variables .." (ej.) C: \ test $ {???: ??}.
Txt
2
Aquí hay una idea. Escriba su propio complemento de eclipse (es decir, un botón cusotm) que asignaría un valor aleatorio pero único a una variable (llamada ${NAME}), y luego haría lo mismo que ejecutar. Luego, use $NAMEcomo valor para el archivo de salida. ¿tal vez?
One Two Three

Respuestas:

176

Vaya a ejecutar como y elija Run Configurations-> Commony en la Entrada y salida estándar también puede elegir un Archivo.

Shervin Asgari
fuente
106
Me resulta absolutamente gracioso que 40 personas hayan votado a favor de copiar y pegar desde la segunda línea de la pregunta.
AnthonyW
13
@AnthonyW Creo que eso se debe principalmente a que la pregunta del título lleva a las personas aquí: "¿Cómo podemos redirigir la salida del eclipse a un archivo?". Esta respuesta es, de hecho, una respuesta a la pregunta del título.
Gerome Bochmann
1
Si no puede encontrar "Ejecutar configuraciones", usando Eclipse 4.4 (Luna), abrí mi Configuración de inicio (haciendo doble clic en el servidor en la pestaña Servidores), hice clic en "Abrir configuración de lanuch", luego fui a la pestaña Común . En la mitad inferior de ese cuadro de diálogo, hay una sección llamada "Entrada y salida estándar". Aquí, podría hacer clic en Archivo y darle un nombre de archivo.
Guy Schalnat el
1
Sugerencia: abra una terminal echo $TTYy especifique lo que devuelva como su archivo. Luego, el terminal reflejará lo que hay en su consola Eclipse.
Sridhar Sarnobat
2
¿Qué? Esta respuesta es incorrecta cuando se lee la pregunta del interlocutor cuidadosamente.
ComputerScientist
11

Puede usar una "variable" dentro del nombre del archivo de salida, por ejemplo:

/tmp/FetchBlock-${current_date}.txt

fecha actual:

Devuelve la hora actual del sistema formateada como aaaaMMdd_HHmm. Se puede usar un argumento opcional para proporcionar un formato alternativo. El argumento debe ser un patrón válido para java.util.SimpleDateFormat.

O también puede usar un system_property o un env_var para especificar algo dinámico (uno debe especificarse como argumentos)

mike32b
fuente
8

Puede configurar la salida de System.out mediante programación haciendo:

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

Editar:

Debido al hecho de que esta solución se basa en un PrintStream, podemos habilitar el AutoFlush, pero de acuerdo con los documentos :

autoFlush - Un booleano; si es verdadero, el búfer de salida se vaciará cada vez que se escriba una matriz de bytes, se invoque uno de los métodos println o se escriba un carácter o byte de nueva línea ('\ n')

Entonces, si no se escribe una nueva línea, recuerde hacerlo System.out.flush()manualmente.

(Gracias Robert Tupelo-Schneck)

Ian2thedv
fuente
1
Parece que también necesita cerrar System.out.flush()para evitar posiblemente perder algo de salida.
Robert Tupelo-Schneck
1

Para resolver el problema, uso la variable $ {string_prompt}. Muestra un diálogo de entrada cuando se ejecuta la aplicación. Puedo configurar la fecha / hora manualmente en ese diálogo.

  1. Mueva el cursor al final de la ruta del archivo. ingrese la descripción de la imagen aquí

  2. Haga clic en variables y seleccione string_prompt ingrese la descripción de la imagen aquí

  3. Seleccione Aplicar y ejecutar ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Desarrollador iOS84
fuente
0

Podemos hacer esto estableciendo la variable de la clase System de la siguiente manera

System.setOut (nuevo PrintStream (nuevo FileOutputStream ("Ruta al archivo de salida"))). También debe cerrar o vaciar 'out' (System.out.close () o System.out.flush ()) para que no se pierda algo de salida.

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

drp
fuente