.NET开发中自定义异常处理源代码

作者:网络 来源:佚名 更新时间:2008-09-28 01:16:55 点击:
 
//自定义异常处理类
using system;
using system.diagnostics;
namespace myappexception
{
  /// <summary>
  /// 从系统异常类applicationexception继承的应用程序异常处理类。
  /// 自动将异常内容记录到windows nt/2000的应用程序日志
  /// </summary>
  public class appexception:system.applicationexception
  {
  public appexception()
  {
  if (applicationconfiguration.eventlogenabled)logevent("出现一个未知错误。");
  }
  public appexception(string message)
  {
  logevent(message);
  }
  public appexception(string message,exception innerexception)
  {
  logevent(message);
  if (innerexception != null)
  {
  logevent(innerexception.message);
  }
  }
  //日志记录类
  using system;
  using system.configuration;
  using system.diagnostics;
  using system.io;
  using system.text;
  using system.threading;
  namespace myeventlog
  {
  /// <summary>
  /// 事件日志记录类,提供事件日志记录支持
  /// <remarks>
  /// 定义了4个日志记录方法 (error, warning, info, trace)
  /// </remarks>
  /// </summary>
  public class applicationlog
  {
  /// <summary>
  /// 将错误信息记录到win2000/nt事件日志中
  /// <param name="message">需要记录的文本信息</param>
  /// </summary>
  public static void writeerror(string message)
  {
  writelog(tracelevel.error, message);
  }
  /// <summary>
  /// 将警告信息记录到win2000/nt事件日志中
  /// <param name="message">需要记录的文本信息</param>
  /// </summary>
  public static void writewarning(string message)
  {
  writelog(tracelevel.warning, message);  
  }
  /// <summary>
  /// 将提示信息记录到win2000/nt事件日志中
  /// <param name="message">需要记录的文本信息</param>
  /// </summary>
  public static void writeinfo(string message)
  {
  writelog(tracelevel.info, message);
  }
  /// <summary>
  /// 将跟踪信息记录到win2000/nt事件日志中
  /// <param name="message">需要记录的文本信息</param>
  /// </summary>
  public static void writetrace(string message)
  {
  writelog(tracelevel.verbose, message);
  }
  /// <summary>
  /// 格式化记录到事件日志的文本信息格式
  /// <param name="ex">需要格式化的异常对象</param>
  /// <param name="catchinfo">异常信息标题字符串.</param>
  /// <retvalue>
  /// <para>格式后的异常信息字符串,包括异常内容和跟踪堆栈.</para>
  /// </retvalue>
  /// </summary>
  public static string formatexception(exception ex, string catchinfo)
  {
  stringbuilder strbuilder = new stringbuilder();
  if (catchinfo != string.empty)
  {
  strbuilder.append(catchinfo).append("\r\n");
  }
  strbuilder.append(ex.message).append("\r\n").append(ex.stacktrace);
  return strbuilder.tostring();
  }
  /// <summary>
  /// 实际事件日志写入方法
  /// <param name="level">要记录信息的级别(error,warning,info,trace).</param>
  /// <param name="messagetext">要记录的文本.</param>
  /// </summary>
  private static void writelog(tracelevel level, string messagetext)
  {
  try
  {
  eventlogentrytype logentrytype;
  switch (level)
  {
  case tracelevel.error:
  logentrytype = eventlogentrytype.error;
  break;
  case tracelevel.warning:
  logentrytype = eventlogentrytype.warning;
  break;
  case tracelevel.info:
  logentrytype = eventlogentrytype.information;
  break;
  case tracelevel.verbose:
  logentrytype = eventlogentrytype.successaudit;
  break;
  default:
  logentrytype = eventlogentrytype.successaudit;
  break;
  }
  eventlog eventlog = new eventlog("application", applicationconfiguration.eventlogmachinename, applicationconfiguration.eventlogsourcename );
  //写入事件日志
  eventlog.writeentry(messagetext, logentrytype);
  }
  catch {} //忽略任何异常
  }
  } //class applicationlog
}