不阻塞地记录到文件

本文关键字:文件 记录 | 更新日期: 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