2009-02-05 6 views
1

Je crée un service qui ressemble à ceci:Enregistrement d'une instance BufferedWriter dans une classe. Des problèmes?

interface MyLogger 
{ 
    void logStuff(int id, String message); 
} 

La mise en œuvre ouvre essentiellement un fichier et met en cache une instance de la BufferedWriter dans la classe. La méthode est synchronisée.

Est-il acceptable d'avoir un wrapper de fichier ouvert par un BufferedWriter d'une manière longue durée?

Une implémentation simpliste de logStuff.

public void logStuff(...) 
{ 
    try 
    { 
     this.writer.write(message); 
     this.writer.flush(); 
    } 
    catch(IOException ignored) {} 
} 
+0

est correct et je pense que log4j fait aussi la même chose que la création de l'objet écrivain pour chaque message, puis la fermeture est une opération coûteuse. –

Répondre

2

Eh oui, il est très bien, vous avez juste besoin d'être conscient que d'autres processus/threads peuvent ne pas être en mesure d'ouvrir le fichier journal pour écrire pendant que votre service a ouvert. Je pense que d'autres processus peuvent encore l'ouvrir en lecture seule, bien que je ne sache pas si cela dépend du système.

Si d'autres threads/processus doivent être en mesure d'écrire dans le fichier mélangé avec les écritures de votre service, vous pouvez faire quelque chose comme la mise en cache des lignes de journal dans l'instance MyLogger; puis une fois que vous avez, disons, 100, ouvrez le fichier en mode ajout, écrivez-les et fermez le fichier. Ce n'est pas une chose particulièrement élégante à faire, cependant.

Questions connexes