using System; using System.Diagnostics; using System.IO; namespace ANX.Framework.NonXNA { public static class Logger { #region Constants private const string Filename = "log.txt"; #endregion #region Private #if !WINDOWSMETRO private static FileStream outputStream; private static StreamWriter writer; #endif private static string CurrentDateTimeStamp { get { DateTime stamp = DateTime.Now; return stamp.Year + "-" + stamp.Month.ToString("00") + "-" + stamp.Day.ToString("00") + " " + stamp.Hour.ToString("00") + ":" + stamp.Minute.ToString("00") + ":" + stamp.Second.ToString("00"); } } private static string CurrentTimeStamp { get { DateTime stamp = DateTime.Now; return stamp.Hour.ToString("00") + ":" + stamp.Minute.ToString("00") + ":" + stamp.Second.ToString("00"); } } #endregion #region Public public static bool IsWritingToConsole; #endregion #region Constructor static Logger() { IsWritingToConsole = true; #if !WINDOWSMETRO outputStream = File.Open(Filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); writer = new StreamWriter(outputStream); writer.AutoFlush = true; #endif WriteToFile("OS: " + OSInformation.GetName() + " - " + OSInformation.GetVersion()); WriteToFile("StartTime: " + CurrentDateTimeStamp); WriteToFile("----------"); } #endregion #region Info public static void Info(string message) { string text = CurrentTimeStamp + "| " + message; WriteToConsole(text); WriteToFile(text); } public static void Info(string message, params object[] formatObjects) { Info(String.Format(message, formatObjects)); } #endregion #region Warning public static void Warning(string message) { string text = CurrentTimeStamp + "| Warning: " + message + BuildStackTrace(); WriteToConsole(text); WriteToFile(text); } #endregion #region Error public static void Error(string message) { string text = CurrentTimeStamp + "| Error: " + message + BuildStackTrace(); WriteToConsole(text); WriteToFile(text); } #endregion #region BuildStackTrace private static string BuildStackTrace() { string result = ""; #if !WINDOWSMETRO string[] lines = new StackTrace(true).ToString().Split('\n'); for (int index = 2; index < lines.Length; index++) { result += "\n" + lines[index].ToString(); } #endif return result; } #endregion #region WriteToConsole private static void WriteToConsole(string message) { if (IsWritingToConsole == false) { return; } if (Debugger.IsAttached) { Debug.WriteLine(message); } else { #if !WINDOWSMETRO Console.WriteLine(message); #endif } } #endregion #region WriteToFile private static void WriteToFile(string message) { #if !WINDOWSMETRO writer.WriteLine(message); #endif } #endregion } }