【发布时间】:2015-05-06 19:12:41
【问题描述】:
当应用程序出现错误时,我正在尝试将一些信息写入文本文件。我将此代码添加到global.asax 中的Application_Error 方法中,但它仍然不起作用:
void Application_Error(object sender, EventArgs e)
{
string path = Server.MapPath("Error.txt");
Exception ex = Server.GetLastError();
if (!File.Exists(path))
{
File.Create(path);
}
if (File.Exists(path))
{
TextWriter tw = new StreamWriter(path, true);
tw.WriteLine("{0} : An Error Has Occurred, Error Description",DateTime.Now.ToString());
tw.WriteLine(@"{");
tw.WriteLine("Error Message: {0}", ex.Message);
tw.WriteLine("Source: {0}", ex.Source);
if (ex.StackTrace != null) tw.WriteLine("StackTrace: {0}", ex.StackTrace);
tw.WriteLine(@"}");
tw.Close();
}
}
如果有问题,我也会在出现错误时重定向到错误页面,这是 web.config 文件:
<customErrors mode="On" defaultRedirect="ASPX/Error.aspx" redirectMode="ResponseRedirect">
<error statusCode="404" redirect="ASPX/Error404.aspx"/>
</customErrors>
那么您知道我的代码有什么问题吗?如何让它将文本写入文件?
编辑: 我只需要以管理员身份运行vs,问题就解决了
【问题讨论】:
-
首先,您应该始终包含引发的异常类型、消息和堆栈跟踪。其次,应用程序在系统/域上具有标识的应用程序池下运行。此用途很可能无权将文件写入文件系统。
-
您是否尝试过创建自定义类,然后添加该代码以查看它是否有效。如果您正在重定向到错误页面,您是否还考虑将代码放入该页面的 page_load 方法或在该页面中创建静态方法..?你有没有使用调试器..?它是否甚至达到了
Application_Error方法.. 如果是的话是哪一行导致了错误.. 这就是调试器的用途 -
“它不起作用”并不是一个真正有用的描述。当你调试它时,它在哪里失败?这段代码会被调用吗?执行的时候有没有错误?文件是否已创建?为什么不将此代码简化为
File.AppendAllText()之类的代码? -
在 ASP.NET 应用程序中,您可能无权写入文本文件。您是否考虑过什么都不做并查看事件日志?还是实现ASP.NET Health Monitoring?它看起来很复杂,但通常只需将
<healthMonitoring enabled="true"/>添加到<system.web>部分的web.config 中就足够了。 -
@Shaked Dahan 没问题,很高兴我能帮上忙。看看 elmah,我真的觉得你会喜欢的。
标签: c# asp.net streamwriter textwriter