Como podemos redirecionar uma saída do console do programa Java para vários arquivos?

161

Como podemos redirecionar a saída do console do eclipse para um arquivo? Eu posso:

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

O problema com 1) é que eu preciso gravar a saída do console em arquivos diferentes em vez de um arquivo.

O problema com 2) é que ele armazena apenas a saída do console gerada por System.out.println()ou o rastreamento de pilha de uma exceção lançada. Ele não captura outros tipos de saídas, por exemplo, avisos log4j etc.

Como podemos redirecionar a saída do console para diferentes arquivos programaticamente?

Ali Shah
fonte
1) Talvez você deva usar "Variáveis ​​.." (ex) C: \ test $ {???: ??}. Txt
cloverink
2
Aqui está uma ideia. Escreva seu próprio plug-in do eclipse (isto é, um botão cusotm) que atribuiria um valor aleatório, mas único, a uma variável (chamada ${NAME}), e faria a mesma coisa que executar. Em seguida, use $NAMEcomo o valor para o arquivo de saída. talvez?
One Two Three

Respostas:

176

Vá para executar como e escolha Run Configurations-> Commone na Entrada e saída padrão você também pode escolher um arquivo.

Shervin Asgari
fonte
106
Acho absolutamente hilário que 40 pessoas tenham votado positivamente em copiar e colar da segunda linha da pergunta.
21813 AnthonyW
13
@AnthonyW Acho que isso ocorre principalmente porque as pessoas são lideradas aqui pela pergunta do título, que é "Como podemos redirecionar a saída do eclipse para um arquivo". Esta resposta é de fato uma resposta à pergunta do título.
Gerome Bochmann
1
Se você não conseguir encontrar "Configurações de Execução", usando o Eclipse 4.4 (Luna), abri minha Configuração de Inicialização (clicando duas vezes no servidor na guia Servidores), cliquei em "Abrir configuração de lanuch" e fui para a guia Comum . Na metade inferior dessa caixa de diálogo, há uma seção chamada "Entrada e saída padrão". Aqui, eu poderia clicar em Arquivo e dar um nome ao arquivo.
Guy Schalnat
1
Dica: abra um terminal echo $TTYe especifique o que ele retorna como seu arquivo. Em seguida, o terminal espelhará o que está no seu console Eclipse.
Sridhar Sarnobat
2
O que? Essa resposta está incorreta ao ler a pergunta do interlocutor com cuidado.
ComputerScientist
11

Você pode usar uma "variável" dentro do nome do arquivo de saída, por exemplo:

/tmp/FetchBlock-${current_date}.txt

data atual:

Retorna a hora atual do sistema formatada como aaaamMMdd_HHmm. Um argumento opcional pode ser usado para fornecer formatação alternativa. O argumento deve ser um padrão válido para java.util.SimpleDateFormat.

Ou você também pode usar uma system_property ou uma env_var para especificar algo dinâmico (é necessário especificar como argumentos)

mike32b
fonte
8

Você pode definir a saída do System.out programaticamente fazendo:

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

Editar:

Devido ao fato de que esta solução é baseada em a PrintStream, podemos ativar o autoFlush, mas de acordo com os documentos :

autoFlush - um booleano; se true, o buffer de saída será liberado sempre que uma matriz de bytes for gravada, um dos métodos println for chamado ou um caractere de nova linha ou byte ('\ n') for gravado.

Portanto, se uma nova linha não for gravada, lembre-se de System.out.flush()manualmente.

(Obrigado Robert Tupelo-Schneck)

Ian2thedv
fonte
1
Parece que você também precisa fechar System.out.flush()para evitar a perda de alguma saída.
Robert Tupelo-Schneck 30/03
1

Para resolver o problema, eu uso a variável $ {string_prompt}. Ele mostra uma caixa de diálogo de entrada quando o aplicativo é executado. Eu posso definir a data / hora manualmente nessa caixa de diálogo.

  1. Mova o cursor no final do caminho do arquivo. insira a descrição da imagem aqui

  2. Clique em variáveis ​​e selecione string_prompt insira a descrição da imagem aqui

  3. Selecione Aplicar e executar insira a descrição da imagem aqui insira a descrição da imagem aqui

iOS-Developer84
fonte
0

Podemos fazer isso definindo a variável System da seguinte maneira

System.setOut (novo PrintStream (novo FileOutputStream ("Caminho para o arquivo de saída")))). Também é necessário fechar ou liberar a variável 'out' (System.out.close () ou System.out.flush ()) para que você não perca nenhuma saída.

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

drp
fonte