public static void log(String text, loglevel level) { //if (level >= logginglevel) file.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " | " + level.ToString() + " | " + text); file.Flush(); }
/// <summary> /// /// </summary> /// <param name="text"></param> /// <param name="level"></param> /// <param name="colour"></param> /// <param name="noLineBreak"></param> /// <param name="banner"></param> /// <param name="pause"></param> /// <param name="skipheader"></param> /// <param name="skipLevel">Levels of the stack to skip when getting the calling class</param> public void log(string text, loglevel level = loglevel.normal, ConsoleColor colour = ConsoleColor.White, bool noLineBreak = false, bool banner = false, bool pause = false, bool skipheader = false, int skipLevel = 1) { //TODO - add exceptions into the log. //check logfile correct if (initialised && Roboto.Settings.enableFileLogging && DateTime.Now > currentLogFileDate.AddHours(Roboto.Settings.rotateLogsEveryXHours)) { initialised = false; try { log("Rotating Logs", loglevel.warn, ConsoleColor.White, false, true); finalise(); initialise(); } catch (Exception e) { initialised = false; log("Error rotating logs! File logging disabled. " + e.ToString(), loglevel.critical); } } if (logLastFlushed < DateTime.Now.AddMinutes(-5)) { textWriter.Flush(); logLastFlushed = DateTime.Now; log("Flushed logfile", loglevel.low); } StackFrame frame = new StackFrame(skipLevel); var method = frame.GetMethod(); string classtype = method.DeclaringType.ToString(); string methodName = method.Name; //guess colour if (colour == ConsoleColor.White) { switch (level) { case loglevel.verbose: colour = ConsoleColor.Gray; break; case loglevel.low: colour = ConsoleColor.DarkGreen; break; case loglevel.normal: colour = ConsoleColor.Cyan; break; case loglevel.warn: colour = ConsoleColor.Magenta; break; case loglevel.high: colour = ConsoleColor.Yellow; if (initialised) { Roboto.Settings.stats.logStat(new statItem("High Errors", typeof(logging))); } break; case loglevel.critical: colour = ConsoleColor.Red; if (initialised) { Roboto.Settings.stats.logStat(new statItem("Critical Errors", typeof(logging))); } break; } } Console.ForegroundColor = colour; if (noLineBreak) { write(text); followOnLine = true; } else { //clear any trailing lines from write's instead of writelines if (followOnLine) { writeLine(""); followOnLine = false; } //add our time and module stamps string outputString = ""; if (banner == false && skipheader == false) { outputString += DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss") + " - " + level.ToString().Substring(0, 2).ToUpper() + " - " + (classtype.ToString() + ":" + methodName).PadRight(45) + " - "; } else { outputString += "".PadRight(53); } //add the main text outputString += text; //add a row of *** for a banner if (banner) { writeLine("".PadLeft(Console.WindowWidth - 1, bannerChar)); } //write the main line writeLine(outputString); //another row of *** if (banner) { writeLine("".PadLeft(Console.WindowWidth - 1, bannerChar)); } //pause if needed if (pause) { writeLine("Press any key to continue"); Console.ReadKey(); } } Console.ResetColor(); }
/// <summary> /// /// </summary> /// <param name="text"></param> /// <param name="level"></param> /// <param name="colour"></param> /// <param name="noLineBreak"></param> /// <param name="banner"></param> /// <param name="pause"></param> /// <param name="skipheader"></param> /// <param name="skipLevel">Levels of the stack to skip when getting the calling class</param> public void log(string text, loglevel level = loglevel.normal, ConsoleColor colour = ConsoleColor.White, bool noLineBreak = false, bool banner = false, bool pause = false, bool skipheader = false, int skipLevel = 1) { //TODO - add exceptions into the log. //check logfile correct if (initialised && Roboto.Settings.enableFileLogging && DateTime.Now > currentLogFileDate.AddHours(Roboto.Settings.rotateLogsEveryXHours)) { initialised = false; try { log("Rotating Logs", loglevel.warn, ConsoleColor.White, false, true); finalise(); initialise(); } catch (Exception e) { initialised = false; log("Error rotating logs! File logging disabled. " + e.ToString(), loglevel.critical); } } StackFrame frame = new StackFrame(skipLevel); var method = frame.GetMethod(); string classtype = method.DeclaringType.ToString(); string methodName = method.Name; //guess colour if (colour == ConsoleColor.White) { switch(level) { case loglevel.verbose: colour = ConsoleColor.Gray; break; case loglevel.low: colour = ConsoleColor.DarkGreen; break; case loglevel.normal: colour = ConsoleColor.Blue; break; case loglevel.warn: colour = ConsoleColor.Magenta; break; case loglevel.high: colour = ConsoleColor.Yellow; if (initialised) { Roboto.Settings.stats.logStat(new statItem("High Errors", typeof(logging))); } break; case loglevel.critical: colour = ConsoleColor.Red; if (initialised) { Roboto.Settings.stats.logStat(new statItem("Critical Errors", typeof(logging))); } break; } } Console.ForegroundColor = colour; if (noLineBreak) { write(text); followOnLine = true; } else { //clear any trailing lines from write's instead of writelines if (followOnLine) { writeLine(""); followOnLine = false; } //add our time and module stamps string outputString = ""; if (banner == false && skipheader == false) { outputString += DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss") + " - " + level.ToString().Substring(0,2).ToUpper() + " - " + (classtype.ToString() + ":" + methodName).PadRight(45) + " - "; } else { outputString += "".PadRight(53); } //add the main text outputString += text; //add a row of *** for a banner if (banner) { writeLine("".PadLeft(Console.WindowWidth-1, bannerChar)); } //write the main line writeLine(outputString); //another row of *** if (banner) { writeLine("".PadLeft(Console.WindowWidth-1, bannerChar)); } //pause if needed if (pause) { writeLine("Press any key to continue"); Console.ReadKey(); } } Console.ResetColor(); }