我有一个Web应用程序,它会将一些信息记录到文件中。我在c#中寻找一个简单的线程安全的非阻塞文件记录器类。我对线程很少有经验。我知道有很棒的日志组件,如log4Net,Enterprise Library Logging Block,ELMAH,但我不希望我的应用程序对外部依赖。我在考虑使用这个队列实现http://www.codeproject.com/KB/cpp/lockfreeq.aspx
答案 0 :(得分:1)
如果您不想使用外部库,可以使用Trace class
答案 1 :(得分:0)
FileStream.BeginWrite方法将写入操作推送到由系统管理的线程上。这很容易。
如果您将消息放入同步的队列中,并使用EndWrite方法将下一个项目从队列中拉出,那么就应用程序而言,所有日志记录都将是非线程的。
最后一步是将消息包装到队列中以设置事件,这样如果在EndWrite查找下一条消息时队列为空,它可以等待事件设置。
答案 2 :(得分:0)
我在办公室的项目中完成了一个简单的日志记录机制。
我有一个共享的日志类(静态C#)。
在这个类中,我有一个同步队列,它有自己的线程。
然后在这个线程中,我只是使用自己定义的WaitTime的AutoresetEvent(我使用250ms)。
然后当这个ResetEvent超时时,我会收集当前队列中的内容(使用DeQueue)并将每个内容写入文件。
要记住的事情......有一个类或结构可以保存条目进入的日期,而不是你写入磁盘的时间,因为你选择更长的时间来睡眠你的线程。
如果您希望应用程序快速退出,请公开一个将事件设置为退出睡眠状态并正常退出的方法。