Come possiamo redirect un output della console del programma Java su più file?

Come possiamo redirect l’output della console Eclipse in un file? Io posso:

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

Il problema con 1) è che ho bisogno di registrare l’output della console su file diversi invece di un file.

Il problema con 2) è che memorizza solo l’output della console generato da System.out.println() o stacktrace di un’eccezione generata. Non cattura altri tipi di output, ad es. Avvisi di log4j, ecc.

Come possiamo redirect l’output della console a diversi file a livello di codice?

Vai a correre come e scegli Run Configurations -> Common e nello standard input e output puoi anche scegliere un file.

È ansible utilizzare una “variabile” all’interno del nome file di output, ad esempio:

 /tmp/FetchBlock-${current_date}.txt 

data odierna:

Restituisce l’ora del sistema corrente formattata come aaaaMMgg_HHmm. Un argomento facoltativo può essere utilizzato per fornire una formattazione alternativa. L’argomento deve essere un modello valido per java.util.SimpleDateFormat.

Oppure puoi anche usare una system_property o una env_var per specificare qualcosa di dinamico (uno deve essere specificato come argomento)

È ansible impostare l’output di System.out a livello di programmazione facendo:

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

Modificare:

A causa del fatto che questa soluzione è basata su PrintStream , possiamo abilitare autoFlush, ma secondo i documenti :

autoFlush – A boolean; se true, il buffer di output verrà svuotato ogni volta che viene scritto un array di byte, viene invocato uno dei metodi println o viene scritto un carattere di nuova riga o un byte (‘\ n’)

Quindi, se una nuova riga non viene scritta, ricordati di System.out.flush() manualmente.

(Grazie Robert Tupelo-Schneck)

Possiamo farlo impostando la variabile della class System nel seguente modo

System.setOut (nuovo PrintStream (nuovo FileOutputStream (“Percorso del file di output”)))). Inoltre è necessario chiudere o svuotare la variabile (System.out.close () o System.out.flush ()) in modo da non perdere alcuni output.

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

Per risolvere il problema, utilizzo la variabile $ {string_prompt}. Mostra una finestra di dialogo di input quando viene eseguita l’applicazione. Posso impostare manualmente la data / ora in quella finestra di dialogo.

  1. Sposta il cursore alla fine del percorso del file. inserisci la descrizione dell'immagine qui

  2. Fare clic su variabili e selezionare string_prompt inserisci la descrizione dell'immagine qui

  3. Seleziona Applica ed Esegui inserisci la descrizione dell'immagine qui inserisci la descrizione dell'immagine qui