消息捕获类
在日常编码当中,我们经常要处理一些错误,为了更好的方便得到错误信息,我仿一些代码写了如下的类。:-)
源代码:
/*
* Created by SharpDevelop.
* User: Bigmouthz@gmail.com& Bigmouthz@163.net
* Date: 2006-2-3
* Time: 13:57
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections;
namespace JFrameWork
{
public class MessageStack
{
static Message _message = null;
static System.Collections.Stack _stack = new System.Collections.Stack();
static int _totalofpush = 0;
// public MessageStack(Message message)
// {
// Push(message);
// }
public static string ToMessageString()
{
try
{
string error ="";
while(_stack.Count > 0)
{
Pop();
error += "\r\n[Time]:"+_message.time.ToString("yyyy-MM-dd hh:mm:ss");
error += "\r\n[Body]:"+_message.body;
error += "\r\n[State]:"+_message.state.ToString();
}
return error;
}
catch(System.Exception e)
{
MessageStack.Push(new Message("[Source]:"+e.Source + "\r\n[Message]:" +e.Message +"\r\n[StackTrace]:"+e.StackTrace +"\r\n[HelpLink]:"+e.HelpLink));
return "Error!";
}
}
public static void WriteLog()
{
string xml = System.Environment.CurrentDirectory + @"/Big.Mouth.Z." + System.DateTime.Now.ToString("yyyyMMddhhmmss") + ".Log";
WriteLog(xml);
}
public static void WriteLog(string xml)
{
try
{
// string xml = @"c:/Message" + System.DateTime.Now.ToString("yyyyMMddhhmmss") + ".log";
System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(xml,System.Text.Encoding.UTF8);
writer.Formatting = System.Xml.Formatting.Indented;
writer.IndentChar = '\t';
writer.WriteStartDocument();
writer.WriteComment("Message Error Log." + System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
writer.WriteStartElement("MessageInfo");
System.Collections.Stack tmp = (System.Collections.Stack)_stack.Clone();
int i = 0;
while(tmp.Count > 0)
{
i++;
Message tmpmessage = (Message)tmp.Pop();
writer.WriteStartElement("Message");
writer.WriteElementString("Row",i.ToString());
writer.WriteStartElement("Body");
writer.WriteCData("\r\n"+tmpmessage.body+"\r\n");
writer.WriteEndElement();
writer.WriteElementString("Time",tmpmessage.time.ToString("yyyy-MM-dd hh:mm:ss"));
writer.WriteElementString("State",tmpmessage.state.ToString());
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();
writer.WriteComment("Author: Bigmouthz@GMail.Com");
writer.Flush();
writer.Close();
tmp.Clear();
}
catch(System.Exception e)
{
MessageStack.Push(new Message("[Source]:"+e.Source + "\r\n[Message]:" +e.Message +"\r\n[StackTrace]:"+e.StackTrace +"\r\n[HelpLink]:"+e.HelpLink));
}
}
public static void Push(Message message)
{
_message = message;
_stack.Push(_message);
_totalofpush++;
}
public static Message Pop()
{
if (_stack.Count > 0)
{
_message = (Message)_stack.Pop();
}
else
{
_message = null;
}
return _message;
}
public static void Clear()
{
_stack.Clear();
}
public static object Clone()
{
return _stack.Clone();
}
public static string Body
{
get {
if (_message != null)
return _message.body;
else
return "Message is Null!";
}
}
public static System.DateTime Time
{
get {
if (_message != null)
return _message.time;
else
return System.DateTime.Now;
}
}
public static bool State
{
get {
if (_message != null)
return _message.state;
else
return true;
}
}
public static int Count
{
get { return _stack.Count; }
}
public static int TotalOfPush
{
get { return _totalofpush;}
}
}
public sealed class Message
{
private string _body;
private System.DateTime _time ;
private bool _state;
public Message(string body, bool state)
{
_body = body;
_time = System.DateTime.Now;
_state = state;
}
public Message(string body)
{
_body = body;
_time = System.DateTime.Now;
_state = false;
}
public string body
{
get { return _body;}
}
public System.DateTime time
{
get { return _time;}
}
public bool state
{
get { return _state;}
}
}
}
引用举例:
try
{...}
catch(System.Exception e)
{
JFrameWork.MessageStack.Push(new JFrameWork.Message("[Source]:"+e.Source + "\r\n[Message]:" +e.Message +"\r\n[StackTrace]:"+e.StackTrace +"\r\n[HelpLink]:"+e.HelpLink));
System.Console.WriteLine("Error OutPut:\r\n{0}",JFrameWork.MessageStack.ToMessageString());
}