消息捕获类
在日常编码当中,我们经常要处理一些错误,为了更好的方便得到错误信息,我仿一些代码写了如下的类。*ß"bx%forum.entlib.net.cni(Õ WóUù
*ß"bx%forum.entlib.net.cni(Õ WóUù
using System;*ß"bx%forum.entlib.net.cni(Õ WóUù
using System.Collections;*ß"bx%forum.entlib.net.cni(Õ WóUù
namespace JFrameWork*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
public class MessageStack*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
static Message _message = null;*ß"bx%forum.entlib.net.cni(Õ WóUù
static System.Collections.Stack _stack = new System.Collections.Stack();*ß"bx%forum.entlib.net.cni(Õ WóUù
static int _totalofpush = 0;*ß"bx%forum.entlib.net.cni(Õ WóUù
// public MessageStack(Message message)*ß"bx%forum.entlib.net.cni(Õ WóUù
// {*ß"bx%forum.entlib.net.cni(Õ WóUù
// Push(message);*ß"bx%forum.entlib.net.cni(Õ WóUù
// }*ß"bx%forum.entlib.net.cni(Õ WóUù
*ß"bx%forum.entlib.net.cni(Õ WóUù
public static string ToMessageString()*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
try*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
string error ="";*ß"bx%forum.entlib.net.cni(Õ WóUù
while(_stack.Count > 0)*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
Pop();*ß"bx%forum.entlib.net.cni(Õ WóUù
error += "\r\n[Time]:"+_message.time.ToString("yyyy-MM-dd hh:mm:ss");*ß"bx%forum.entlib.net.cni(Õ WóUù
error += "\r\n[Body]:"+_message.body;*ß"bx%forum.entlib.net.cni(Õ WóUù
error += "\r\n[State]:"+_message.state.ToString();*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
return error;*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
catch(System.Exception e)*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
MessageStack.Push(new Message("[Source]:"+e.Source + "\r\n[Message]:" +e.Message +"\r\n[StackTrace]:"+e.StackTrace +"\r\n[HelpLink]:"+e.HelpLink));*ß"bx%forum.entlib.net.cni(Õ WóUù
return "Error!";*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public static void WriteLog()*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
string xml = System.Environment.CurrentDirectory + @"/Big.Mouth.Z." + System.DateTime.Now.ToString("yyyyMMddhhmmss") + ".Log";*ß"bx%forum.entlib.net.cni(Õ WóUù
WriteLog(xml);*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public static void WriteLog(string xml)*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
try*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
// string xml = @"c:/Message" + System.DateTime.Now.ToString("yyyyMMddhhmmss") + ".log";*ß"bx%forum.entlib.net.cni(Õ WóUù
System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(xml,System.Text.Encoding.UTF8);*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.Formatting = System.Xml.Formatting.Indented;*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.IndentChar = '\t';*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteStartDocument();*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteComment("Message Error Log." + System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteStartElement("MessageInfo");*ß"bx%forum.entlib.net.cni(Õ WóUù
System.Collections.Stack tmp = (System.Collections.Stack)_stack.Clone();*ß"bx%forum.entlib.net.cni(Õ WóUù
int i = 0;*ß"bx%forum.entlib.net.cni(Õ WóUù
while(tmp.Count > 0)*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
i++;*ß"bx%forum.entlib.net.cni(Õ WóUù
Message tmpmessage = (Message)tmp.Pop();*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteStartElement("Message");*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteElementString("Row",i.ToString());*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteStartElement("Body");*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteCData("\r\n"+tmpmessage.body+"\r\n");*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteEndElement();*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteElementString("Time",tmpmessage.time.ToString("yyyy-MM-dd hh:mm:ss"));*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteElementString("State",tmpmessage.state.ToString());*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteEndElement();*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteEndElement();*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteEndDocument();*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.WriteComment("Author: Bigmouthz@GMail.Com");*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.Flush();*ß"bx%forum.entlib.net.cni(Õ WóUù
writer.Close();*ß"bx%forum.entlib.net.cni(Õ WóUù
tmp.Clear();*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
catch(System.Exception e)*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
MessageStack.Push(new Message("[Source]:"+e.Source + "\r\n[Message]:" +e.Message +"\r\n[StackTrace]:"+e.StackTrace +"\r\n[HelpLink]:"+e.HelpLink));*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public static void Push(Message message)*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
_message = message;*ß"bx%forum.entlib.net.cni(Õ WóUù
_stack.Push(_message);*ß"bx%forum.entlib.net.cni(Õ WóUù
_totalofpush++;*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public static Message Pop()*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
if (_stack.Count > 0)*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
_message = (Message)_stack.Pop();*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
else*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
_message = null;*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
return _message;*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public static void Clear()*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
_stack.Clear();*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public static object Clone()*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
return _stack.Clone();*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public static string Body*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
get {*ß"bx%forum.entlib.net.cni(Õ WóUù
if (_message != null)*ß"bx%forum.entlib.net.cni(Õ WóUù
return _message.body;*ß"bx%forum.entlib.net.cni(Õ WóUù
else*ß"bx%forum.entlib.net.cni(Õ WóUù
return "Message is Null!";*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public static System.DateTime Time*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
get {*ß"bx%forum.entlib.net.cni(Õ WóUù
if (_message != null)*ß"bx%forum.entlib.net.cni(Õ WóUù
return _message.time;*ß"bx%forum.entlib.net.cni(Õ WóUù
else*ß"bx%forum.entlib.net.cni(Õ WóUù
return System.DateTime.Now;*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public static bool State*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
get {*ß"bx%forum.entlib.net.cni(Õ WóUù
if (_message != null)*ß"bx%forum.entlib.net.cni(Õ WóUù
return _message.state;*ß"bx%forum.entlib.net.cni(Õ WóUù
else*ß"bx%forum.entlib.net.cni(Õ WóUù
return true;*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public static int Count*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
get { return _stack.Count; }*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public static int TotalOfPush*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
get { return _totalofpush;}*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public sealed class Message*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
private string _body;*ß"bx%forum.entlib.net.cni(Õ WóUù
private System.DateTime _time ;*ß"bx%forum.entlib.net.cni(Õ WóUù
private bool _state;*ß"bx%forum.entlib.net.cni(Õ WóUù
public Message(string body, bool state)*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
_body = body;*ß"bx%forum.entlib.net.cni(Õ WóUù
_time = System.DateTime.Now;*ß"bx%forum.entlib.net.cni(Õ WóUù
_state = state;*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public Message(string body)*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
_body = body;*ß"bx%forum.entlib.net.cni(Õ WóUù
_time = System.DateTime.Now;*ß"bx%forum.entlib.net.cni(Õ WóUù
_state = false;*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public string body*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
get { return _body;}*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public System.DateTime time*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
get { return _time;}*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
public bool state*ß"bx%forum.entlib.net.cni(Õ WóUù
{*ß"bx%forum.entlib.net.cni(Õ WóUù
get { return _state;}*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù
}*ß"bx%forum.entlib.net.cni(Õ WóUù