using System; using System.Collections; using System.Diagnostics; using System.Reflection; using System.Threading; namespace AsterNET { #if LOGGER #region class LogFactory /// /// Facade to hide details of the underlying logging system. /// public sealed class Logger { public enum MessageLevel { Info, Warning, Error, Debug } private static Logger logger; private Hashtable visibleDebug = new Hashtable(); private bool visibleDebugDef = true; private Hashtable visibleError = new Hashtable(); private bool visibleErrorDef = true; private Hashtable visibleInfo = new Hashtable(); private bool visibleInfoDef = true; private Hashtable visibleWarning = new Hashtable(); private bool visibleWarningDef = true; /// /// Creates a new CommonsLoggingLog obtained from commons-logging's LogFactory for the given class. /// public Logger() { } /// /// Returns an instance of Log suitable for logging from the given class. /// /// the created logger. public static Logger Instance() { if (logger == null) logger = new Logger(); return logger; } private void writeLine(string type, string msg) { System.Diagnostics.Debug.Print("{0}[{1}] {2}", type, Thread.CurrentThread.Name, msg); } private void writeLine(string msg) { System.Diagnostics.Debug.Print(msg); } // Max 2 calls from original caller ! private string debugInfo() { var sf = new StackFrame(2, true); MethodBase mb = sf.GetMethod(); return string.Concat(mb.DeclaringType.Name, ":", mb.Name); } /// /// Get visibility for message level of class:method /// /// messageType:class:method /// public bool IsVisible(MessageLevel messageLevel, string classMethod) { return isVisible(messageLevel, classMethod.GetHashCode()); } private bool isVisible(MessageLevel messageLevel, int hash) { switch (messageLevel) { case MessageLevel.Debug: return (visibleDebug.ContainsKey(hash) ? (bool) visibleDebug[hash] : visibleDebugDef); case MessageLevel.Error: return (visibleError.ContainsKey(hash) ? (bool) visibleError[hash] : visibleErrorDef); case MessageLevel.Info: return (visibleInfo.ContainsKey(hash) ? (bool) visibleInfo[hash] : visibleInfoDef); case MessageLevel.Warning: return (visibleWarning.ContainsKey(hash) ? (bool) visibleWarning[hash] : visibleWarningDef); } return true; } /// /// Set visibility for message level of class:method /// /// visible /// message level /// class:method public void Visible(bool visible, MessageLevel messageLevel, string classMethod) { int hash = classMethod.GetHashCode(); switch (messageLevel) { case MessageLevel.Debug: visibleDebug[hash] = visible; return; case MessageLevel.Error: visibleError[hash] = visible; return; case MessageLevel.Info: visibleInfo[hash] = visible; return; case MessageLevel.Warning: visibleWarning[hash] = visible; return; } } /// /// Set visibility for message level of class:method /// /// visible /// message level /// class:method public void Visible(bool visible, MessageLevel messageLevel) { switch (messageLevel) { case MessageLevel.Debug: visibleDebugDef = visible; return; case MessageLevel.Error: visibleErrorDef = visible; return; case MessageLevel.Info: visibleInfoDef = visible; return; case MessageLevel.Warning: visibleWarningDef = visible; return; } } #region Debug public void Debug(object o) { string caller = debugInfo(); if (isVisible(MessageLevel.Debug, caller.GetHashCode())) writeLine(" Debug:", string.Concat(caller, " - ", o.ToString())); } public void Debug(string msg) { string caller = debugInfo(); if (isVisible(MessageLevel.Debug, caller.GetHashCode())) writeLine(" Debug:", string.Concat(caller, " - ", msg)); } public void Debug(string format, params object[] args) { string caller = debugInfo(); if (isVisible(MessageLevel.Debug, caller.GetHashCode())) writeLine(" Debug:", string.Concat(caller, " - ", string.Format(format, args))); } public void Debug(string msg, Exception ex) { string caller = debugInfo(); if (isVisible(MessageLevel.Debug, caller.GetHashCode())) writeLine(" Debug:", string.Concat(caller, " - ", string.Format("{0}\n{1}", msg, ex))); } #endregion #region Info public void Info(object o) { string caller = debugInfo(); if (isVisible(MessageLevel.Info, caller.GetHashCode())) writeLine(" Info:", string.Concat(caller, " - ", o.ToString())); } public void Info(string msg) { string caller = debugInfo(); if (isVisible(MessageLevel.Info, caller.GetHashCode())) writeLine(" Info:", string.Concat(caller, " - ", msg)); } public void Info(string format, params object[] args) { string caller = debugInfo(); if (isVisible(MessageLevel.Info, caller.GetHashCode())) writeLine(" Info:", string.Concat(caller, " - ", string.Format(format, args))); } public void Info(string msg, Exception ex) { string caller = debugInfo(); if (isVisible(MessageLevel.Info, caller.GetHashCode())) writeLine(" Info:", string.Concat(caller, " - ", string.Format("{0}\n{1}", msg, ex))); } #endregion #region Warning public void Warning(object o) { string caller = debugInfo(); if (isVisible(MessageLevel.Warning, caller.GetHashCode())) writeLine("Warning:", string.Concat(caller, " - ", o.ToString())); } public void Warning(string msg) { string caller = debugInfo(); if (isVisible(MessageLevel.Warning, caller.GetHashCode())) writeLine("Warning:", string.Concat(caller, " - ", msg)); } public void Warning(string format, params object[] args) { string caller = debugInfo(); if (isVisible(MessageLevel.Warning, caller.GetHashCode())) writeLine("Warning:", string.Concat(caller, " - ", string.Format(format, args))); } public void Warning(string msg, Exception ex) { string caller = debugInfo(); if (isVisible(MessageLevel.Warning, caller.GetHashCode())) writeLine("Warning:", string.Concat(caller, " - ", string.Format("{0}\n{1}", msg, ex))); } #endregion #region Error public void Error(object o) { string caller = debugInfo(); if (isVisible(MessageLevel.Error, caller.GetHashCode())) writeLine(" Error:", string.Concat(caller, " - ", o.ToString())); } public void Error(string msg) { string caller = debugInfo(); if (isVisible(MessageLevel.Error, caller.GetHashCode())) writeLine(" Error:", string.Concat(caller, " - ", msg)); } public void Error(string format, params object[] args) { string caller = debugInfo(); if (isVisible(MessageLevel.Error, caller.GetHashCode())) writeLine(" Error:", string.Concat(caller, " - ", string.Format(format, args))); } public void Error(string msg, Exception ex) { string caller = debugInfo(); if (isVisible(MessageLevel.Error, caller.GetHashCode())) writeLine(" Error:", string.Concat(caller, " - ", string.Format("{0}\n{1}", msg, ex))); } #endregion } #endregion #endif }