using System; using System.Text; using System.Threading; using System.IO; namespace Holo { /// /// Provides interface output related functions, such as logging activities. /// public static class Out { /// /// Enum with flags for log importancies. If 'minimumImportance' flag is higher than the action to be logged, then the action won't be logged. /// public enum logFlags { ImportantAction = 3, StandardAction = 2, BelowStandardAction = 1, MehAction = 0 } /// /// Flag for minimum importance in logs. Adjust this to don't print less important logs. /// /// private static Thread ErrorSaver = new Thread(new ThreadStart(WriteAllErrors)); public static logFlags minimumImportance; private static bool bwait = false; private static int CurrentWaitingMessages = 0; private static StringBuilder ErrorQueue = new StringBuilder(); //private static bool IsWriting = false; internal static bool savingErrors = false; // internal static FileStream Writer = new System.IO.FileStream(IO.workingDirectory + @"\Logs\Errorlog.log", System.IO.FileMode.Append, System.IO.FileAccess.Write); /// /// Prints a green line of log, together with timestamp and method name. /// /// The log line to be printed. public static void wait() { while (bwait) { Thread.Sleep(10); } } public static void WriteLine(string logText) { wait(); bwait = true; DateTime _DTN = DateTime.Now; //StackFrame _SF = new StackTrace().GetFrame(1); Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString()); //Console.ForegroundColor = ConsoleColor.Blue; //Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("] » "); Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine(logText); Console.ForegroundColor = ConsoleColor.Gray; bwait = false; } /// /// Prints a green line of log, together with timestamp and method name. /// /// The log line to be printed. /// The importance flag of this log line. public static void WriteLine(string logText, logFlags logFlag) { if ((int)logFlag < (int)minimumImportance) return; wait(); bwait = true; DateTime _DTN = DateTime.Now; //StackFrame _SF = new StackTrace().GetFrame(1); Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString()); //Console.ForegroundColor = ConsoleColor.Blue; //Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("] » "); Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine(logText); Console.ForegroundColor = ConsoleColor.Gray; bwait = false; } /// /// Prints a customizeable line of log, together with timestamp and method name. /// /// The log line to be printed. /// The importance flag of this log line. /// The color to use on the left. /// The color to use on the right. public static void WriteLine(string logText, logFlags logFlag, ConsoleColor colorOne, ConsoleColor colorTwo) { if ((int)logFlag < (int)minimumImportance) return; wait(); bwait = true; DateTime _DTN = DateTime.Now; //StackFrame _SF = new StackTrace().GetFrame(1); Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString()); //Console.ForegroundColor = colorOne; //Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("] » "); Console.ForegroundColor = colorTwo; Console.WriteLine(logText); Console.ForegroundColor = ConsoleColor.Gray; bwait = false; } public static void WriteTrace(string logText) { return; /*DateTime _DTN = DateTime.Now; //StackFrame _SF = new StackTrace().GetFrame(1); Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString() + "] ["); Console.ForegroundColor = ConsoleColor.DarkMagenta; Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("] » "); Console.ForegroundColor = ConsoleColor.DarkMagenta; Console.WriteLine(logText); Console.ForegroundColor = ConsoleColor.Gray;*/ } /// /// Prints a red, error line of log, together with timestamp and method name. /// /// The log line to be printed. public static void WriteError(string logText) { DateTime _DTN = DateTime.Now; //StackFrame _SF = new StackTrace().GetFrame(1); Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString()); //Console.ForegroundColor = ConsoleColor.Red; //Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("] » "); Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine(logText); Console.ForegroundColor = ConsoleColor.Gray; } /// /// Prints a red,error line of log, together with timestamp and method name. /// /// The log line to be printed. /// The importance flag of this error. public static void WriteError(string logText, logFlags logFlag) { if ((int)logFlag < (int)minimumImportance) return; DateTime _DTN = DateTime.Now; //StackFrame _SF = new StackTrace().GetFrame(1); Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString()); //Console.ForegroundColor = ConsoleColor.Red; //Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("] » "); Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine(logText); Console.ForegroundColor = ConsoleColor.Gray; } /// /// Writes a plain text line. /// /// The log line to be printed. public static void WritePlain(string logText) { wait(); bwait = true; Console.WriteLine(logText); bwait = false; } /// /// Writes a blank line. /// public static void WriteBlank() { wait(); bwait = true; Console.WriteLine(); bwait = false; } /// /// Writes a special line of log, with customizeable colors and header coloring of logText. /// /// The log line to be printed. /// The importance flag of this log line. /// The color to use on the left. /// The color to use on the right. /// The string to use infront of logText. /// The length of the header to color. /// The color for the header in the logText. public static void WriteSpecialLine(string logText, logFlags logFlag, ConsoleColor colorOne, ConsoleColor colorTwo, string headerHead, int headerLength, ConsoleColor headerColor) { //if ((int)logFlag < (int)minimumImportance) //return; wait(); bwait = true; DateTime _DTN = DateTime.Now; //StackFrame _SF = new StackTrace().GetFrame(1); Console.Write("[" + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString()); //Console.ForegroundColor = colorOne; //Console.Write(_SF.GetMethod().ReflectedType.Name + "." + _SF.GetMethod().Name); Console.ForegroundColor = ConsoleColor.Gray; Console.Write("] " + headerHead + " "); Console.ForegroundColor = headerColor; try { Console.Write(logText.Substring(0, headerLength)); } catch { Console.Write(logText); } Console.ForegroundColor = colorTwo; Console.WriteLine(logText.Substring(headerLength)); Console.ForegroundColor = ConsoleColor.Gray; bwait = false; } private static void StartSaving() { savingErrors = true; ErrorSaver.Start(); } public static void PrimaryErrorWriter(string logText) { DateTime _DTN = DateTime.Now; string Current = "Event occurred : " + _DTN.ToLongTimeString() + ":" + _DTN.Millisecond.ToString() + "\r\n"; ErrorQueue.Append(Current + logText + "\r\n\r\n"); CurrentWaitingMessages++; //if (CurrentWaitingMessages >= 10) // WriteAllErrors(); if (!savingErrors) { StartSaving(); } WriteError("Errormessage has been added to queue"); } public static void SecundaryErrorWriter(string FatalErrorMessage) //<= Only used when the server crashes or a serious error/exception appears { try { StreamWriter fileWriter = new StreamWriter(IO.workingDirectory + @"\Logs\FatalErrors.log", true); fileWriter.Write(FatalErrorMessage); fileWriter.Close(); } catch (Exception e) { Out.WriteLine(e.ToString()); } } internal static void WriteAllErrors() { Out.WriteLine("Starting checking errorqueue"); string DataToSave; while (true) { if (ErrorQueue.Length > 0) { DataToSave = ErrorQueue.ToString(); //Fail = false; try { StreamWriter fileWriter = new StreamWriter(IO.workingDirectory + @"\Logs\Exceptions.log", true); fileWriter.Write(DataToSave.ToString()); fileWriter.Close(); } catch (Exception e) { Out.WriteLine(e.ToString()); } Out.WriteLine("All errors where successfully saved."); ErrorQueue = new StringBuilder(); } Thread.Sleep(10000); } } } }