• 消息捕获类


    在日常编码当中,我们经常要处理一些错误,为了更好的方便得到错误信息,我仿一些代码写了如下的类。:-)

    源代码:
    /*
     * 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());    
       } 

  • 相关阅读:
    Python之推导式笔记
    利用ShardingSphere-JDBC实现分库分表--配置中心的实现
    利用ShardingSphere-JDBC实现分库分表
    MGR安装记录
    学习RadonDB源码(三)
    学习RadonDB源码(二)
    学习RadonDB源码(一)
    Spring Cloud学习笔记--Spring Boot初次搭建
    一次单核CPU占用过高问题的处理
    MySQL AutoCommit带来的问题
  • 原文地址:https://www.cnblogs.com/bigmouthz/p/332949.html
Copyright © 2020-2023  润新知