使用Enterprise Library 4.1从多个进程记录到同一文件

rik*_*koe 8 c# logging multithreading enterprise-library

我有几个并发运行的进程,我想要登录到同一个文件.

我们一直在使用Enterprise Library 4.1 Logging Application Block(带有a RollingFlatFileTraceListener),它工作正常,除了它在两个进程同时尝试写入日志文件时为日志文件名添加GUID这一事实(a System.Diagnostics.TextWriterTraceListener我相信的怪癖).

我尝试了各种各样的事情,包括Logger.Writer.Dispose()写入日志文件后调用,但每次写入日志条目时都不适合进行阻塞调用.

EntLib论坛建议将MSMQ与分销商服务一起使用,但这不是一个选项,因为我的公司不允许使用MSMQ.

有没有其他方法可以快速轻松地从多个线程/进程登录到同一个文件?

Ran*_*ica 5

很抱歉,但答案是否定的。File TraceListeners 锁定输出文件,因此只有一个 TraceListener 可以登录到一个文件。

您可以尝试其他不基于文件的跟踪侦听器(例如数据库、事件日志)。

我能想到的另一个选择是编写自己的日志记录服务(进程外),该服务将记录到文件并接受 LogEntries。然后创建一个自定义跟踪侦听器,将消息发送到您的服务。

这可能不是一个好主意,因为您会有一些自定义开发,而且它可能会影响性能,因为它是进程外调用。基本上,您正在设置自己的简化伪分销商服务。