using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Bro.Common.Log { /// /// 默认的日志类 /// public class LogTraceListener : TraceListener { public delegate void LogTraceEvent(TraceEventType evType, string msg); // 日志事件代理 public LogTraceEvent LogEvent { get; set; } private LogHelper log { get; set; } public LogTraceListener() { log = LogHelper.GetInstance(); } public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args) { switch (eventType) { case TraceEventType.Critical: log.FatalFormat(format, args); break; case TraceEventType.Information: log.InfoFormat(format, args); break; case TraceEventType.Warning: log.WarnFormat(format, args); break; case TraceEventType.Error: log.ErrorFormat(format, args); break; default: log.DebugFormat(format, args); break; } var sb = new StringBuilder(); sb.AppendFormat(@"{0}[{1}]> ", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"), eventCache.ThreadId); sb.AppendFormat(format, args); sb.AppendFormat(@"{0}", Environment.NewLine); if (null != LogEvent) { LogEvent(eventType, sb.ToString()); } } public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message) { switch (eventType) { case TraceEventType.Critical: log.Fatal(message); break; case TraceEventType.Information: log.Info(message); break; case TraceEventType.Warning: log.Warn(message); break; case TraceEventType.Error: log.Error(message); break; default: log.Debug(message); break; } var sb = new StringBuilder(); sb.AppendFormat(@"{0}[{1}]> {2}{3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"), eventCache.ThreadId, message, Environment.NewLine); if (null != LogEvent) { LogEvent(eventType, sb.ToString()); } } public override void WriteLine(string msg) { log.Fatal(msg); var sb = new StringBuilder(); sb.AppendFormat(@"{0}[{1}]> {2}{3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"), System.Threading.Thread.CurrentThread.ManagedThreadId, msg, Environment.NewLine); if (null != LogEvent) { LogEvent(TraceEventType.Critical, sb.ToString()); } } public override void Write(string msg) { log.Fatal(msg); var sb = new StringBuilder(); sb.AppendFormat(@"{0}[{1}]> {2}{3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"), System.Threading.Thread.CurrentThread.ManagedThreadId, msg, Environment.NewLine); if (null != LogEvent) { LogEvent(TraceEventType.Critical, sb.ToString()); } } #region 测试代码(勿删) #if test public override void Write(object o) { int i = 0; i++; } public override void Write(string message, string category) { int i = 0; i++; } public override void Fail(string message) { int i = 0; i++; } public override void Fail(string message, string detailMessage) { int i = 0; i++; } public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args) { base.TraceEvent(eventCache, source, eventType, id, format, args); } public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message) { base.TraceEvent(eventCache, source, eventType, id, message); } public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data) { base.TraceData(eventCache, source, eventType, id, data); } public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, params object[] data) { base.TraceData(eventCache, source, eventType, id, data); } public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id) { base.TraceEvent(eventCache, source, eventType, id); } public override void TraceTransfer(TraceEventCache eventCache, string source, int id, string message, Guid relatedActivityId) { base.TraceTransfer(eventCache, source, id, message, relatedActivityId); } public override void Write(object o, string category) { base.Write(o, category); } public override void WriteLine(string msg) { int i = 0; i++; } public override void WriteLine(object o) { base.WriteLine(o); } public override void WriteLine(object o, string category) { base.WriteLine(o, category); } public override void WriteLine(string message, string category) { base.WriteLine(message, category); } /// /// 日志输出 /// /// public override void Write(string msg) { int i = 0; i++; } #endif #endregion } }