//自定义异常处理类 
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>
///     事件日志记录类,提供事件日志记录支持 
///     <res>
///         定义了4个日志记录方法 (error, warning, info, trace) 
///     </res>
/// </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
}