不阻塞地记录到文件
本文关键字:文件 记录 | 更新日期: 2023-09-27 17:51:11
我正在寻找一种在不阻塞调用线程的情况下记录文件的方法。但是,所有的日志调用必须按顺序执行。
我在想一些像
void Log(string msg)
{
ThreadStart ts = new ThreadStart ()
{
System.IO.File.AppendAllText("log.txt", msg);
};
new Thread(ts).Start();
}
但是这能保证一切都按顺序登录吗?
Log方法应该可以在任何时间从任何线程调用
Us this:
http://msdn.microsoft.com/en-us/library/dd267265.aspx然后按顺序进入队列。让线程从并发队列中拉出。这将保留你方的订单。
当你记录日志时,不要为每个日志启动一个新线程。只有一个"日志"线程。
但是这能保证一切都按顺序登录吗?
这将以随机顺序登录。由于并发写同一个文件,有时也会创建Access Denied issue
。
更好的方法是保留日志的内部缓冲区,并在计时器中单独的单个线程中写出来。这将使内存日志丢失(不写入文件)在应用程序崩溃的情况下。
如果你不是为了学习而这样做;您可能需要考虑利用现有的日志记录框架。在运行自己的日志时,有很多潜在的"陷阱",(在大多数情况下)你想要的日志已经写好了。
我没有全部使用它们,但是我可以说我从来没有遇到过log4net不能完成我需要的(并且比我写的要好)的情况。
https://stackoverflow.com/questions/126540/what-is-your-net-logging-framework-of-choice