using Apewer.Internals; using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace Apewer { /// 日志记录程序。 public class Logger { private string _key = Guid.NewGuid().ToString("n"); private string _target = ""; private bool _enabled = true; /// 异常。 public event Event ExceptionEvent; /// 调试。 public event Event DebugEvent; /// 文本。 public event Event TextEvent; /// 信息。 public event Event InfomationEvent; /// 注意。 public event Event WarningEvent; /// 错误。 public event Event ErrorEvent; /// 自定义。 public event Event CustomEvent; /// 已启用。 public bool Enabled { get { return _enabled; } set { _enabled = value; } } /// 唯一标识。 public string Key { get { return _key; } } /// 目标。 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; } } /// 异常。 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 { } } /// 自定义。 public void Custom(object value) { if (value == null) return; var item = new LogItem(LogType.Custom); item.Logger = this; item.Target = _target; item.Custom = value; } /// 调试。 public void Debug(string value) { if (value == null) return; var item = new LogItem(LogType.Debug); item.Logger = this; item.Target = _target; item.Content = value; } /// 文本。 public void Text(string value) { if (value == null) return; var item = new LogItem(LogType.Text); item.Logger = this; item.Target = _target; item.Content = value; } /// 信息。 public void Infomation(string value) { if (value == null) return; var item = new LogItem(LogType.Infomation); item.Logger = this; item.Target = _target; item.Content = value; } /// 注意。 public void Warning(string value) { if (value == null) return; var item = new LogItem(LogType.Warning); item.Logger = this; item.Target = _target; item.Content = value; } /// 错误。 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 ExceptionDefaultCallback = null; private static Event CustomDefaultCallback = null; private static Event DebugDefaultCallback = null; private static Event TextDefaultCallback = null; private static Event InfomationDefaultCallback = null; private static Event WarningDefaultCallback = null; private static Event 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 { } } /// 默认的日志记录程序。 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; } } }