public void GetLog(WebData webData, LogLevel?minLevel = null) { LogLevel level = minLevel ?? LogLevel.Verbose; webData.Result.AddMessage(webData.Method, "Retrieved logging datasets..."); int i = (int)(DateTime.Now.TimeOfDay.Ticks / TimeSpan.TicksPerMillisecond); var items = new List <LogEntry>(); foreach (var msg in LogCollector.ToArray().Reverse()) { if (msg.Level > level) { continue; } if (msg.Exception == null || 0 == LogCollector.ExceptionMode) { items.Add(new LogEntry() { ID = i--, Level = msg.Level, Content = msg.Content, Source = msg.Source, DateTime = msg.DateTime, }); continue; } //log stacktrace bool stackTrace = (0 != (LogCollector.ExceptionMode & LogExceptionMode.StackTrace)); var exceptionMessage = msg.Exception.ToXT(stackTrace); //with same level ? if (0 != (LogCollector.ExceptionMode & LogExceptionMode.SameLevel)) { items.Add(new LogEntry() { ID = i--, Level = msg.Level, Content = msg.Content + new XT("\n") + exceptionMessage, Source = msg.Source, DateTime = msg.DateTime, }); } else { //two different messages items.Add(new LogEntry() { ID = i--, Level = msg.Level, Content = msg.Content, Source = msg.Source, DateTime = msg.DateTime, }); if (level >= LogLevel.Verbose) { items.Add(new LogEntry() { ID = i--, Level = LogLevel.Verbose, Content = exceptionMessage, Source = msg.Source, DateTime = msg.DateTime, }); } } } webData.Result.AddStructs(items); }