以下は、かなり簡単なスレッドセーフなロギングクラスを実装する正しい方法でしょうか?スレッドセーフなロギングクラスの実装
私は明示的にTextWriter
を閉じることはできないことを知っています、それは問題でしょうか?私が最初にTextWriter.Synchronized
メソッドを使用する場合、私は静的コンストラクタでそれを初期化し、それが読み取り専用そうのように作られるまで
は、動作していないようでした:
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();
}
}
私はlog4netを見ることをお勧めします。 http://logging.apache.org/log4net/index.html –
第三者ロギングフレームワークは間違いなく良い選択です... –