EnterpriseLibrary Logger错误:从未同步的代码块调用对象同步方法

时间:2013-01-22 04:14:20

标签: c# logging asynchronous unity-container enterprise-library

使用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 direclty,没有计时器已经过去的事件 - 同样的问题......

1 个答案:

答案 0 :(得分:3)

这看起来是一个现有问题:http://unity.codeplex.com/workitem/7206

好消息是,这应该通过版本2.1.505.2解决,您可以访问:http://nuget.org/packages/Unity/2.1.505.2