3

使用 MS Enterprise Library Logger 进行记录时,我开始收到此错误。

日志记录机制使我对日志条目进行排队,然后使用计时器每 10 秒刷新一次条目。

它工作了一段时间,但今天开始出现此错误:

代码行:

Logger.Write(list[i]);

错误信息:

Object synchronization method was called from an unsynchronized block of code.

堆栈跟踪:

at Microsoft.Practices.Unity.SynchronizedLifetimeManager.TryExit()

整个计时器 elsapsed 事件处理程序:

private void TimerElapsed(object sender, ElapsedEventArgs e)
{
            // Lock and free free the queue quickly - write to an intermediate list.
            var list = new List<LogEntry>();
            lock (LogEntryQueueLock)
            {
                while (true)
                {
                    if (_logEntryQueue.Count <= 0)
                        break;

                    //dequeue the LogEntry that will be written to the log
                    list.Add(_logEntryQueue.Dequeue());
                }
            }

            // Flush the list in to the log
            for (int i = 0; i < list.Count; i++)
            {
                ProcessEntry(list[i]);  // Strip commas from the string
                Logger.Write(list[i]);  //  <<<== ERRORS HERE
            }

}

非常感谢您的任何建议!

[编辑]:我尝试直接调用 Logger.Write,没有计时器经过事件 - 同样的问题......

4

1 回答 1

3

这似乎是一个现有问题:http ://unity.codeplex.com/workitem/7206 。

好消息是,这应该使用 2.1.505.2 版本解决,您可以在以下网址获得:http: //nuget.org/packages/Unity/2.1.505.2

于 2013-01-22T05:32:24.110 回答