Tuesday, 13 February 2007

Comment rediriger System.out et System.err vers un fichier

Récémment je déboguais une application qui tournait correctement sur ma machine de développement, mais sur la machine client avait des problèmes. Comme il s'agissait d'une simple application Swing il n'y avait pas de log; visiblement il y avait des exceptions inattendues qui se declenchaient mais comme le stack trace ne s'affichait que sur System.err (que je ne pouvais pas voir), je n'avais aucune idée de ce qui se passait et j'ai dû me déplacer.

J'ai donc bricolé un petit utilitaire pour rediriger très simplement System.out et System.err vers un fichier. Il ne s'agit pas d'une solution pour remplacer java.util.logging ou Log4j, mais dans certains cas il peut être très utile, alors je le partage avec le monde. Tout ce qu'il faut faire c'est d'inclure les lignes suivantes dans votre classe d'entrée (là où main sera appelé):


  static {
    StdRedirect.redirect("myLogFile.log");
  }
  

Par exemple. Désormais, le fichier myLogFile.log recevra tous les messages destinés à la console. *Inutile de vous préciser que dans un vrai programme, vous préciserez le chemin de façon portable : StdRedirect.redirect(System.getProperty("user.home") + File.separator + "myLogFile.log");. La code source est presqu'aussi simple ; vous pouvez le visualiser ici (GPL).

Avec ça, l'utilisateur aura donc un fichier à vous envoyer si jamais vous rencontrez un bogue qui ne devrait pas être là, et le déboguage de vos applications Swing sur Windows sera sans doute simplifié!

Posted by jon at 7:02 PM in Java 
 
« February »
SunMonTueWedThuFriSat
    123
45678910
11121314151617
18192021222324
25262728   
       
 
Non enim id agimus ut exerceatur vox, sed ut exerceat.