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
}
}