using System; using System.Collections.Generic; using System.Text; using System.IO; using Microsoft.Win32; using System.Reflection; using System.Diagnostics; namespace Ooganizer.Platform.Utilities { public class DebugLogger { private static string s_strFileNPath = ""; private static FileM s_fileM = null; private static LogInstantiator s_LogI = null; private static int s_LoadTime = 0; private static bool s_firstTime = true; /// /// Use the Log(string line) method to quickly write to a temp log file in the current assembly directory /// static DebugLogger() { if (s_LogI == null) { int timebefore = System.Environment.TickCount; s_LogI = new LogInstantiator(); s_LoadTime = System.Environment.TickCount - timebefore; } if (s_fileM == null) s_fileM = new FileM(s_LogI.strFileName, "log", s_LogI.strDirectoryPath, true); if(s_strFileNPath == "") s_strFileNPath = s_fileM.PathNFile; } public static void Log(string line) { if (s_firstTime) { //s_fileM.WriteLineUTF8("EasyLogger's Logger.cs was loaded in " + s_LoadTime.ToString() + " miliseconds"); s_firstTime = false; } s_fileM.WriteLineUTF8(line); } /// /// Small Helper class in order to get the location of the currently running assembly /// private class LogInstantiator { public string strFileName; public string strDirectoryPath; private static RegistryKey s_OogyRootKey; public LogInstantiator() { // For Random File names ~shouldn't be used anymore //string strRandomFileName = Path.GetRandomFileName(); //strRandomFileName = strRandomFileName.Substring(0, (strRandomFileName.Length - 4)); // stripe extension (.xyz) //strFileName = strRandomFileName; // Find the Calling Assembly that is NOT this one StackTrace stackTrace = new StackTrace(); StackFrame stackFrame; MethodBase stackFrameMethod; string typeName; int framecount = 3; stackFrame = stackTrace.GetFrame(framecount); stackFrameMethod = stackFrame.GetMethod(); typeName = stackFrameMethod.ReflectedType.FullName; // *IMP* Use the calling Assembly Type Name as the file name strFileName = typeName; // *Work-Around*, we can't have a circular reference with InstallationSpec, so we just // have to Query for the LogPath Directly instead of using Platform.InstallationSpec s_OogyRootKey = Registry.LocalMachine.OpenSubKey("Software\\Ooganizer",false); if (s_OogyRootKey != null) { object keyvalue = s_OogyRootKey.GetValue("LogPath"); if ((keyvalue != null) && (keyvalue.ToString() != "")) strDirectoryPath = keyvalue.ToString(); } } } } }