varios una proyecto programa para logger example ejecutar desde correr consola compilar como comando clase archivos java eclipse

proyecto - ¿Cómo podemos redirigir una salida de consola de programa Java a múltiples archivos?



java cmd (5)

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

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

El problema con 1) es que necesito registrar 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 programáticamente?


Para resolver el problema, uso la variable $ {string_prompt}. Muestra un cuadro de 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.

  2. Haga clic en variables y seleccione string_prompt

  3. Seleccione Aplicar y ejecutar


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 eliminar la variable ''out'' (System.out.close () o System.out.flush ()) para que no falte alguna salida.

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


Puede establecer la salida de System.out programáticamente 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 docs :

autoFlush - A boolean; si es verdadero, el búfer de salida se vacía cuando se escribe una matriz de bytes, se invoca uno de los métodos println o se escribe un carácter o byte de nueva línea (''/ n'')

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

(Gracias Robert Tupelo-Schneck)


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

/tmp/FetchBlock-${current_date}.txt

fecha actual:

Devuelve la hora del sistema actual 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 (cualquiera de los dos debe especificarse como argumentos)


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