void QueueWatcher(object state) { CancellationTokenSource tokenSource = (CancellationTokenSource)state; LogFile.Create().Close(); while (!tokenSource.IsCancellationRequested) { if (LogQueue.Count <= 0) { Thread.Sleep(250); continue; } using (var f = LogFile.AppendText()) { f.AutoFlush = true; while (LogQueue.Count > 0) { var o = LogQueue.Dequeue(); if (o.Message == OldLogMessage.Message) { return; } Console.ForegroundColor = o.GetColour(); OldLogMessage = o; f.WriteLine(o.Message); Console.WriteLine(o.Message); Console.ResetColor(); } } } }
void QueueWatcher() { LogFile.Create().Close(); while (IsThreadRunning) { if (LogQueue.Count <= 0) { Thread.Sleep(250); continue; } LogHandler.IsBackground = false; using (var f = LogFile.AppendText()) { f.AutoFlush = true; while (LogQueue.Count > 0) { var o = LogQueue.Dequeue(); if (o.Message == OldLogMessage.Message) { return; } Console.ForegroundColor = o.GetColour(); OldLogMessage = o; f.WriteLine(o.Message); Console.WriteLine(o.Message); Console.ResetColor(); } } LogHandler.IsBackground = true; } LogHandler.Join(); }
/// <summary> /// Log a message. /// Check first for config and enqueue the message if necessary. /// </summary> /// <param name="message">The message to log.</param> /// <param name="logType">Log type.</param> /// <param name="sender">The sender as a string.</param> /// <param name="context">The context of the message, this will normally be the sender or this class.</param> private static void Log(string message, LogType logType, string sender, Object context) { // Log everything if application is not playing. if (Application.isPlaying) { if (config == null) { LogQueue.Enqueue(new QueueableLog(message, logType, sender, context)); if (askedForInitialization) { return; } askedForInitialization = true; ConfigurationManager.OnServiceReady += service => { config = service.GetConfig <DebugConfig>(); if (config == null) { UnityEngine .Debug .LogError("There is no debug config file. Won't be able to log anything!"); } }; return; } while (LogQueue.Count > 0) { QueueableLog log = LogQueue.Dequeue(); LogSingleMessage(log.Message, log.LogType, log.Sender, log.Context); } } LogSingleMessage(message, logType, sender, context); }