2

我有一个 Web 应用程序,它将一些信息记录到文件中。我正在 C# 中寻找一个简单的线程安全的非阻塞文件记录器类。我对线程的经验很少。我知道那里有很棒的日志记录组件,例如 log4Net、Enterprise Library Logging Block、ELMAH,但我不希望我的应用程序有外部依赖。我正在考虑使用这个队列实现http://www.codeproject.com/KB/cpp/lockfreeq.aspx

4

3 回答 3

1

如果不想使用外部库,可以使用Trace

于 2009-07-15T08:29:39.323 回答
0

FileStream.BeginWrite 方法将写入操作推送到系统管理的线程上。这很容易。

如果您将消息放入同步队列,并让 EndWrite 方法将下一项从队列中拉出,那么就应用程序而言,您的所有日志记录都将脱离线程。

最后一步是将消息放入队列以设置事件,这样当 EndWrite 来查找下一条消息时,如果队列为空,则可以等待设置事件。

于 2009-07-15T08:28:48.687 回答
0

我在办公室的项目中做了一个简单的日志记录机制。

我有一个共享的日志类(静态 C#)。

在这个类中,我有一个同步队列,它有自己的线程。

然后在这个线程中,我只是让它使用带有您自己定义的 WaitTime 的 AutoresetEvent(我使用 250 毫秒)。

然后,当此 ResetEvent 超时时,我收集当前队列中的内容(使用 DeQueue)并将每个内容写入文件。

要记住的事情......有一个类或结构可以保存条目进入的日期,而不是你写入磁盘的时间,以防你选择更长的时间来让你的线程休眠。

如果您希望您的应用程序快速退出,请公开一个方法,该方法将设置事件以使其退出睡眠并优雅退出。

于 2009-07-15T08:32:10.240 回答