using Apewer.Internals; using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace Apewer { /// <summary>日志记录程序。</summary> public class Logger { private string _key = Guid.NewGuid().ToString("n"); private string _target = ""; private bool _enabled = true; /// <summary>异常。</summary> public event Event<Exception> ExceptionEvent; /// <summary>调试。</summary> public event Event<string> DebugEvent; /// <summary>文本。</summary> public event Event<string> TextEvent; /// <summary>信息。</summary> public event Event<string> InfomationEvent; /// <summary>注意。</summary> public event Event<string> WarningEvent; /// <summary>错误。</summary> public event Event<string> ErrorEvent; /// <summary>自定义。</summary> public event Event<object> CustomEvent; /// <summary>已启用。</summary> public bool Enabled { get { return _enabled; } set { _enabled = value; } } /// <summary>唯一标识。</summary> public string Key { get { return _key; } } /// <summary>目标。</summary> public string Target { get { return _target; } protected set { _target = value ?? ""; } } internal void Invoke(LogItem item) { if (item == null) return; switch (item.Type) { case LogType.Debug: if (DebugEvent != null) DebugEvent(this, item.Content); break; case LogType.Text: if (TextEvent != null) TextEvent(this, item.Content); break; case LogType.Infomation: if (InfomationEvent != null) InfomationEvent(this, item.Content); break; case LogType.Warning: if (WarningEvent != null) WarningEvent(this, item.Content); break; case LogType.Error: if (ErrorEvent != null) ErrorEvent(this, item.Content); break; case LogType.Exception: if (ExceptionEvent != null) ExceptionEvent(this, item.Exception); break; case LogType.Custom: if (CustomEvent != null) CustomEvent(this, item.Custom); break; } } /// <summary>异常。</summary> public void Exception(Exception value) { if (value == null) return; var item = new LogItem(LogType.Exception); item.Logger = this; item.Target = _target; try { item.Content = value.ToString(); } catch { } } /// <summary>自定义。</summary> public void Custom(object value) { if (value == null) return; var item = new LogItem(LogType.Custom); item.Logger = this; item.Target = _target; item.Custom = value; } /// <summary>调试。</summary> public void Debug(string value) { if (value == null) return; var item = new LogItem(LogType.Debug); item.Logger = this; item.Target = _target; item.Content = value; } /// <summary>文本。</summary> public void Text(string value) { if (value == null) return; var item = new LogItem(LogType.Text); item.Logger = this; item.Target = _target; item.Content = value; } /// <summary>信息。</summary> public void Infomation(string value) { if (value == null) return; var item = new LogItem(LogType.Infomation); item.Logger = this; item.Target = _target; item.Content = value; } /// <summary>注意。</summary> public void Warning(string value) { if (value == null) return; var item = new LogItem(LogType.Warning); item.Logger = this; item.Target = _target; item.Content = value; } /// <summary>错误。</summary> public void Error(string value) { if (value == null) return; var item = new LogItem(LogType.Error); item.Logger = this; item.Target = _target; item.Content = value; } private Logger(string target) { _target = target ?? ""; } private static Event<Exception> ExceptionDefaultCallback = null; private static Event<object> CustomDefaultCallback = null; private static Event<string> DebugDefaultCallback = null; private static Event<string> TextDefaultCallback = null; private static Event<string> InfomationDefaultCallback = null; private static Event<string> WarningDefaultCallback = null; private static Event<string> ErrorDefaultCallback = null; private static void Logger_ExceptionEvent(object sender, Exception value) { if (ExceptionDefaultCallback != null) ExceptionDefaultCallback(sender, value); } private static void Logger_CustomEvent(object sender, object value) { if (ExceptionDefaultCallback != null) CustomDefaultCallback(sender, value); } private static void Logger_DebugEvent(object sender, string value) { if (ExceptionDefaultCallback != null) DebugDefaultCallback(sender, value); } private static void Logger_TextEvent(object sender, string value) { throw new NotImplementedException(); } private static void Logger_InfomationEvent(object sender, string value) { throw new NotImplementedException(); } private static void Logger_WarningEvent(object sender, string value) { throw new NotImplementedException(); } private static void Logger_ErrorEvent(object sender, string value) { } private Logger(Type target) { try { if (target != null) { _target = target.FullName; } } catch { } } private Logger(object target) { try { if (target != null) { _target = target.GetType().FullName; } } catch { } } /// <summary>默认的日志记录程序。</summary> public static Logger Default(object target) { var logger = new Logger(target); logger.CustomEvent += Logger_CustomEvent; logger.ExceptionEvent += Logger_ExceptionEvent; logger.DebugEvent += Logger_DebugEvent; logger.TextEvent += Logger_TextEvent; logger.InfomationEvent += Logger_InfomationEvent; logger.WarningEvent += Logger_WarningEvent; logger.ErrorEvent += Logger_ErrorEvent; return logger; } } }