internal void ReadLog() { LogFileInfo logFileInfo = null; int num = 0; try { if (this.batchQueue.IsFull) { num = Tools.RandomizeTimeSpan(this.config.ReaderSleepTime, this.config.ReaderSleepTimeRandomRange); string text = string.Format("The queue for log prefix {0} is full. Reader will not parse it until the queue is no longer full.", this.instance); ExTraceGlobals.ReaderTracer.TraceWarning((long)this.GetHashCode(), text); EventLogger.Logger.LogEvent(LogUploaderEventLogConstants.Tuple_LogReaderQueueFull, this.instance, new object[] { this.instance }); long num2 = DateTime.UtcNow.Ticks - this.lastTimeWhenQeueFull; if (num2 > 1800000000L) { this.lastTimeWhenQeueFull = DateTime.UtcNow.Ticks; ServiceLogger.LogWarning(ServiceLogger.Component.LogReader, (LogUploaderEventLogConstants.Message) 2147487654U, text, this.instance, ""); } } else { logFileInfo = this.logMonitor.GetLogForReaderToProcess(); if (logFileInfo == null) { num = Tools.RandomizeTimeSpan(this.config.ReaderSleepTime, this.config.ReaderSleepTimeRandomRange); } else { this.ProcessLog(logFileInfo); } } } catch (FileNotFoundException ex) { EventLogger.Logger.LogEvent(LogUploaderEventLogConstants.Tuple_LogReaderLogMissing, ex.Message, new object[] { Thread.CurrentThread.Name, ex }); ServiceLogger.LogError(ServiceLogger.Component.LogReader, (LogUploaderEventLogConstants.Message) 2147487659U, ex.Message, this.instance, ""); this.logMonitor.ReaderCompletedProcessingLog(logFileInfo); return; } catch (IOException ex2) { string text2 = (logFileInfo == null) ? "unknown log" : logFileInfo.FullFileName; string text3 = string.Format("Caught an IOException when reading log {0}. Exception: {1}", text2, ex2); ExTraceGlobals.LogMonitorTracer.TraceError((long)this.GetHashCode(), text3); EventLogger.Logger.LogEvent(LogUploaderEventLogConstants.Tuple_ReadLogCaughtIOException, logFileInfo.FullFileName, new object[] { logFileInfo.FullFileName, ex2 }); ServiceLogger.LogError(ServiceLogger.Component.LogReader, (LogUploaderEventLogConstants.Message) 3221229485U, text3, this.instance, text2); if (!ex2.Message.Contains("Insufficient system resources exist to complete the requested service")) { throw; } this.logMonitor.ReaderCompletedProcessingLog(logFileInfo); } catch (NotSupportedException ex3) { EventLogger.Logger.LogEvent(LogUploaderEventLogConstants.Tuple_UnsupportedLogVersion, "UnSupportedLogVersion", new object[] { logFileInfo.FullFileName, ex3 }); ServiceLogger.LogError(ServiceLogger.Component.LogMonitor, (LogUploaderEventLogConstants.Message) 3221229488U, ex3.Message, this.instance, logFileInfo.FullFileName); EventNotificationItem.Publish(ExchangeComponent.Name, "UnsupportedLogVersion", null, ex3.Message, ResultSeverityLevel.Error, false); throw ex3; } catch (Exception ex4) { if (!(ex4 is ThreadAbortException) || !this.cancellationContext.StopToken.IsCancellationRequested) { string text4 = (logFileInfo == null) ? "unknown log" : logFileInfo.FullFileName; string text5 = string.Format("{0} processing {1} catches an exception: {2}", Thread.CurrentThread.Name, text4, ex4); ExTraceGlobals.ReaderTracer.TraceError((long)this.GetHashCode(), text5); EventLogger.Logger.LogEvent(LogUploaderEventLogConstants.Tuple_LogReaderUnknownError, null, new object[] { Thread.CurrentThread.Name, text4, ex4 }); EventNotificationItem.Publish(ExchangeComponent.Name, "LogReaderUnknownError", null, text5, ResultSeverityLevel.Error, false); this.perfCounterInstance.TotalLogReaderUnknownErrors.Increment(); ServiceLogger.LogError(ServiceLogger.Component.LogReader, (LogUploaderEventLogConstants.Message) 3221229474U, text5, this.instance, text4); throw; } Thread.ResetAbort(); ServiceLogger.LogInfo(ServiceLogger.Component.DatabaseWriter, LogUploaderEventLogConstants.Message.LogMonitorRequestedStop, Thread.CurrentThread.Name + " received thread abort event", this.instance, ""); } if (num > 0 && this.cancellationContext.StopToken.WaitHandle.WaitOne(num)) { this.cancellationContext.StopWaitHandle.Set(); } }