0

我正在寻找一种在不阻塞调用线程的情况下记录到文件的方法。仍然必须按顺序执行所有日志调用。

我在想类似的东西

void Log(string msg)
{
    ThreadStart ts = new ThreadStart ()
    {

        System.IO.File.AppendAllText("log.txt", msg);
    };
    new Thread(ts).Start();
}

但这能保证按顺序记录所有内容吗?

Log 方法也应该可以随时从任何线程调用。

4

3 回答 3

2

但这能保证按顺序记录所有内容吗?

这将按随机顺序登录。Access Denied issue由于同时写入同一文件,有时也会创建。

更好的方法是保留日志的内部缓冲区,并在计时器中单独的单线程中写入。如果应用程序崩溃,这将丢失内存中的日志(未写入文件)。

于 2013-01-10T17:21:24.243 回答
2

我们这个:

http://msdn.microsoft.com/en-us/library/dd267265.aspx

然后按顺序推入队列。让线程从并发队列中拉出。这将保留您的订单。

当您登录时,不要为每个日志启动一个新线程。只有一个“记录”线程。

于 2013-01-10T17:22:04.587 回答
0

如果您不是为了学习而这样做;您可能需要考虑利用现有的日志框架。滚动你自己的时候有很多潜在的“陷阱”,并且(在大多数情况下)你想要的日志已经写好了。

我还没有全部使用它们,但我可以说我从来没有遇到过 log4net 没有做我需要的事情(而且比我写的更好)的情况。

https://stackoverflow.com/questions/126540/what-is-your-net-logging-framework-of-choice

于 2013-01-10T17:31:20.383 回答