我用下面的代码捕捉,用以在前台给用户提示,后台将日志写到系统日志里,供我查看。
可是,错误日志是写进去了,可是日志的描述却说“事件 ID ( 0 )的描述(在资源( MySource )中)无法找到。”,而且很多信息都没有,包括事件id、应用程序信息、请求信息、进程信息。怎么样让我写的日志和系统自己的日志是一样完整的?
为什么会说“事件 ID ( 0 )的描述(在资源( MySource )中)无法找到。”?我的代码:
protected void Page_Load(object sender, EventArgs e)
{
int[] a = new int[20];
for (int i = 0; i < 10; i++)
{
a[i + 30] = 80;
}
Response.Write(a[0]);
} protected void Page_Error(object sender, EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
string err = "Error Caught in Application_Error event\n" +
"Error in: " + Request.Url.ToString() +
"\nError Message:" + objErr.Message.ToString() +
"\nStack Trace:" + objErr.StackTrace.ToString();
string source = "MySource";
if (!EventLog.SourceExists(source))
{
//因Nerwork Service没有权限修改注册表,所以需人工创建事件源
//方法:
//在注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
// 右击“Application”点击“新建”再点“项”
//将此新建项重命名为“MySource”
throw new Exception("需人工创建事件源");
}
System.Diagnostics.EventLog.WriteEntry(source, err, System.Diagnostics.EventLogEntryType.Error);
HttpContext.Current.Response.Write("网页错误!");
HttpContext.Current.Server.ClearError();
}
我的程序写的系统日志:事件类型: 错误
事件来源: MySource
事件种类: 无
事件 ID: 0
日期: 2010-2-2
事件: 12:07:05
用户: N/A
计算机: WDJ
描述:
事件 ID ( 0 )的描述(在资源( MySource )中)无法找到。本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息。您可能可以使用 /AUXSOURCE= 标识来检索词描述;查看帮助和支持以了解详细信息。下列信息是事件的一部分: Error Caught in Application_Error event
Error in: http://wdj/Default.aspx
Error Message:索引超出了数组界限。
Stack Trace: 在 TestError._Default.Page_Load(Object sender, EventArgs e) 位置 G:\kezhu\Member\MemberWeb\TestError\Default.aspx.cs:行号 18
在 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
在 System.Web.UI.Control.OnLoad(EventArgs e)
在 System.Web.UI.Control.LoadRecursive()
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint).
系统自己捕捉错误的话,记录的日志:事件类型: 警告
事件来源: ASP.NET 2.0.50727.0
事件种类: Web 事件
事件 ID: 1309
日期: 2010-2-2
事件: 13:25:05
用户: N/A
计算机: WDJ
描述:
事件代码: 3005
事件消息: 发生了未处理的异常。
事件时间: 2010-2-2 13:25:04
事件时间(UTC): 2010-2-2 5:25:04
事件 ID: 0ff6647906344962882eda573900aa9e
事件序列: 8
事件匹配项: 1
事件详细信息代码: 0
应用程序信息:
应用程序域: /LM/W3SVC/1/ROOT-1-129095619029843750
信任级别: Full
应用程序虚拟路径: /
应用程序路径: G:\kezhu\Member\MemberWeb\TestError\
计算机名: WDJ
进程信息:
进程 ID: 4656
进程名: w3wp.exe
帐户名: NT AUTHORITY\NETWORK SERVICE
异常信息:
异常类型: IndexOutOfRangeException
异常消息: 索引超出了数组界限。
请求信息:
请求 URL: http://wdj/Default.aspx
请求路径: /Default.aspx
用户主机地址: 127.0.0.1
用户:
是否已经过身份验证: False
身份验证类型:
线程帐户名: NT AUTHORITY\NETWORK SERVICE
线程信息:
线程 ID: 1
线程帐户名: NT AUTHORITY\NETWORK SERVICE
是否正在模拟: False
堆栈跟踪: 在 TestError._Default.Page_Load(Object sender, EventArgs e) 位置 G:\kezhu\Member\MemberWeb\TestError\Default.aspx.cs:行号 15
在 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
在 System.Web.UI.Control.OnLoad(EventArgs e)
在 System.Web.UI.Control.LoadRecursive()
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
自定义事件详细信息: 有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
可是,错误日志是写进去了,可是日志的描述却说“事件 ID ( 0 )的描述(在资源( MySource )中)无法找到。”,而且很多信息都没有,包括事件id、应用程序信息、请求信息、进程信息。怎么样让我写的日志和系统自己的日志是一样完整的?
为什么会说“事件 ID ( 0 )的描述(在资源( MySource )中)无法找到。”?我的代码:
protected void Page_Load(object sender, EventArgs e)
{
int[] a = new int[20];
for (int i = 0; i < 10; i++)
{
a[i + 30] = 80;
}
Response.Write(a[0]);
} protected void Page_Error(object sender, EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
string err = "Error Caught in Application_Error event\n" +
"Error in: " + Request.Url.ToString() +
"\nError Message:" + objErr.Message.ToString() +
"\nStack Trace:" + objErr.StackTrace.ToString();
string source = "MySource";
if (!EventLog.SourceExists(source))
{
//因Nerwork Service没有权限修改注册表,所以需人工创建事件源
//方法:
//在注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
// 右击“Application”点击“新建”再点“项”
//将此新建项重命名为“MySource”
throw new Exception("需人工创建事件源");
}
System.Diagnostics.EventLog.WriteEntry(source, err, System.Diagnostics.EventLogEntryType.Error);
HttpContext.Current.Response.Write("网页错误!");
HttpContext.Current.Server.ClearError();
}
我的程序写的系统日志:事件类型: 错误
事件来源: MySource
事件种类: 无
事件 ID: 0
日期: 2010-2-2
事件: 12:07:05
用户: N/A
计算机: WDJ
描述:
事件 ID ( 0 )的描述(在资源( MySource )中)无法找到。本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息。您可能可以使用 /AUXSOURCE= 标识来检索词描述;查看帮助和支持以了解详细信息。下列信息是事件的一部分: Error Caught in Application_Error event
Error in: http://wdj/Default.aspx
Error Message:索引超出了数组界限。
Stack Trace: 在 TestError._Default.Page_Load(Object sender, EventArgs e) 位置 G:\kezhu\Member\MemberWeb\TestError\Default.aspx.cs:行号 18
在 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
在 System.Web.UI.Control.OnLoad(EventArgs e)
在 System.Web.UI.Control.LoadRecursive()
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint).
系统自己捕捉错误的话,记录的日志:事件类型: 警告
事件来源: ASP.NET 2.0.50727.0
事件种类: Web 事件
事件 ID: 1309
日期: 2010-2-2
事件: 13:25:05
用户: N/A
计算机: WDJ
描述:
事件代码: 3005
事件消息: 发生了未处理的异常。
事件时间: 2010-2-2 13:25:04
事件时间(UTC): 2010-2-2 5:25:04
事件 ID: 0ff6647906344962882eda573900aa9e
事件序列: 8
事件匹配项: 1
事件详细信息代码: 0
应用程序信息:
应用程序域: /LM/W3SVC/1/ROOT-1-129095619029843750
信任级别: Full
应用程序虚拟路径: /
应用程序路径: G:\kezhu\Member\MemberWeb\TestError\
计算机名: WDJ
进程信息:
进程 ID: 4656
进程名: w3wp.exe
帐户名: NT AUTHORITY\NETWORK SERVICE
异常信息:
异常类型: IndexOutOfRangeException
异常消息: 索引超出了数组界限。
请求信息:
请求 URL: http://wdj/Default.aspx
请求路径: /Default.aspx
用户主机地址: 127.0.0.1
用户:
是否已经过身份验证: False
身份验证类型:
线程帐户名: NT AUTHORITY\NETWORK SERVICE
线程信息:
线程 ID: 1
线程帐户名: NT AUTHORITY\NETWORK SERVICE
是否正在模拟: False
堆栈跟踪: 在 TestError._Default.Page_Load(Object sender, EventArgs e) 位置 G:\kezhu\Member\MemberWeb\TestError\Default.aspx.cs:行号 15
在 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
在 System.Web.UI.Control.OnLoad(EventArgs e)
在 System.Web.UI.Control.LoadRecursive()
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
自定义事件详细信息: 有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
Error Message:索引超出了数组界限。