it-swarm-eu.dev

Comment écrire sur la sortie standard à l'aide de BufferedWriter

J'écris actuellement une application qui produit plusieurs fichiers journaux à l'aide de BufferedWriter. Pendant le débogage, cependant, je veux écrire dans System.out au lieu d'un fichier. Je pensais pouvoir changer de:

log = new BufferedWriter(new FileWriter(tokenizerLog));

à:

BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out));
log.write("Log output\n");

par opposition à:

System.out.println("log output")

La nouvelle option OutputStreamWriter n'a cependant pas fonctionné. Comment puis-je changer juste l'objet à l'intérieur du constructeur BufferedWriter pour rediriger d'un fichier vers Standard out. Parce que j'ai plusieurs fichiers journaux sur lesquels j'écrirai, utiliser System.out partout et changer la sortie en fichier n'est pas vraiment une option.

28
amccormack

Votre approche fonctionne, vous oubliez simplement de vider la sortie:

try {    
  BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out));

  log.write("This will be printed on stdout!\n");
  log.flush();
}
catch (Exception e) {
  e.printStackTrace();
}

OutputStreamWriter et PrintWriter sont des instances Writer, vous pouvez donc faire quelque chose comme:

BufferedWriter log;

Writer openForFile(String fileName) {
  if (fileName != null)
    return new PrintWriter(fileName);
  else
    return new OutputStreamWriter(System.out);
}

log = new BufferedWriter(openForFile(null)); //stdout
log = new BufferedWriter(openForFile("mylog.log")); // using a file

ou quoi que ce soit, c'est juste pour vous donner l'idée ..

39
Jack

Puisque vous mentionnez qu'il s'agit de la journalisation, vous voudrez peut-être envisager d'utiliser une bibliothèque de journalisation comme log4j. Il vous permettra de modifier la destination du journal (fichier journal ou console) en modifiant uniquement les fichiers de configuration.

2
SBA