Sto cercando di capire la migliore strategia per l'accesso al server web async-IO su cui sto lavorando. Ho pensato che il modo più semplice era quello di avere una classe Singleton che mantiene filestreams aperto per i file di log appropriati in modo ho potuto solo fare qualcosa di simile:C# Singleton Logging Class
Util.Logger.GetInstance().LogAccess(str);
O qualcosa del genere.
La mia classe si presenta così:
public sealed class Logger {
private static StreamWriter sw;
private static readonly Logger instance = new Logger();
private Logger() {
sw = new StreamWriter(logfile);
}
public static Logger GetInstance() {
return instance;
}
public void LogAccess(string str) {
sw.WriteLine(str);
}
}
Questo è tutto solo nella mia testa davvero, e non vedo per suggerimenti su come farlo meglio e fare in modo che sto facendo in modo corretto anche. La cosa più importante è che ho bisogno che sia thread-safe, che ovviamente non è nel suo stato attuale. Non sono sicuro del modo migliore per farlo.
Si sta utilizzando. NET 4, forse? Nuove librerie asincrone potrebbero aiutarti. (Coglierò anche l'occasione per sottolineare quanto sarebbe elegante in F # e mi congedo!) –
Qual è il valore dell'uso di Singleton rispetto ai metodi statici? – kyoryu
Mi piace il fatto che tu voglia provare tu stesso. La registrazione non è così difficile da creare, ma creare un buon modo per gestire il threading è una sfida. I framework suggeriti sono tutti a posto, ma crearli tu stesso ti darà una buona opportunità per conoscere e lavorare con thread-safety. Diventa davvero difficile se si desidera che più applicazioni (o in pool/server di applicazioni ASP.NET) scrivano sullo stesso file, perché in questo caso la sicurezza del thread non è sufficiente. – Gertjan