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);
}
}
}
}