Est-ce que ce qui suit serait la bonne façon d'implémenter une classe de journalisation thread-safe assez simple?
Je sais que je ne ferme jamais explicitement le TextWriter
, serait-ce un problème?
Lorsque j'ai initialement utilisé la méthode TextWriter.Synchronized
, cela ne semblait pas fonctionner jusqu'à ce que je l'initialise dans un constructeur statique et que je le fasse en lecture seule comme ceci:
public static class Logger
{
static readonly TextWriter tw;
static Logger()
{
tw = TextWriter.Synchronized(File.AppendText(SPath() + "\\Log.txt"));
}
public static string SPath()
{
return ConfigManager.GetAppSetting("logPath");
}
public static void Write(string logMessage)
{
try
{
Log(logMessage, tw);
}
catch (IOException e)
{
tw.Close();
}
}
public static void Log(string logMessage, TextWriter w)
{
w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),
DateTime.Now.ToLongDateString());
w.WriteLine(" :");
w.WriteLine(" :{0}", logMessage);
w.WriteLine("-------------------------------");
// Update the underlying file.
w.Flush();
}
}