2

我有以下场景: 1. .NET UI 端使用 Logging App Block 写入平面文件 2. 非托管 Windows 服务使用专有记录器写入与 1 相同的文件。

问题:有没有办法让 FlatFile TraceListener 在记录条目后关闭它的文件句柄,以便 Windows 服务也可以写入文件?

谢谢!

更新:我包括 Microsoft.Practices.EnterpriseLibrary.Logging.Logger.Writer.Dispose(); 这会关闭流,所以这可以解决问题——只是好奇是否有另一种方法可以做到这一点。

更新 2:最后的笔记

P&P 建议从多个应用程序写入单个 MSMQ。这样您就不需要调用 Dispose() 等。

4

3 回答 3

2

I've had to deal with this using log4net. I wasn't able to make use of the logging framework's file logging support at all, and had to roll my own log appender that catches sharing violations. At that point, your choices are either to buffer events in memory and write them out later or to block until you can get access to the file.

于 2009-01-21T23:02:34.163 回答
0

我认为您的选择是处理它的最佳方式 - 只需在完成后处置作者,这应该最终确定并释放作者仍然拥有的所有资源。

另外,我担心两个处理都试图同时写入并导致异常,但也许 App Block 有一些内置的解决方法代码。

于 2009-01-21T22:49:16.063 回答
0

你从哪里得到 .Dispose ?我输入 EnterpriseLibrary.Logging.Logger.Writer 但 .Writer 没有方法或属性,没有 .Dispose。

谢谢,

TCW

找到了 :

导入 Microsoft.Practices.EntLib.Common 可以解决问题。

于 2010-08-10T14:34:03.190 回答