


//自定义异常处理类

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(" ");

}

strBuilder.Append(ex.Message).Append(" ").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

}