//自定义异常处理类 |
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 |
} |