C# 不同页面上发生的ASP.net日志记录错误
我该怎么做呢C# 不同页面上发生的ASP.net日志记录错误,c#,asp.net,exception,logging,C#,Asp.net,Exception,Logging,我该怎么做呢 protected void Page_Load(object sender, EventArgs e) { try { doSomething(); } catch (Exception ex) { // Here i would like to know that the page is "Problem.aspx" /
protected void Page_Load(object sender, EventArgs e)
{
try
{
doSomething();
}
catch (Exception ex)
{
// Here i would like to know that the page is "Problem.aspx"
// and that it was caused from the doSomething() function
}
}
private void doSomething()
{
logToSomething();
}
您可以通过解析异常消息来确定所有这些 查看消息并使用正则表达式提取所需的信息。异常对象有一个属性,它可以准确地告诉您错误发生的位置 另外,请检查(更具体地说是日志记录块)
记录的错误提供了堆栈跟踪,让您确切地知道错误发生的位置 我正在使用这个小类记录错误,看看我是如何获得页面和函数的(Stacktrace): 这对我来说已经足够了
注意:从VB.NET转换而来,因此未经测试您可能希望查看的另一个选项是ELMAH(ASP.NET的错误日志记录模块和处理程序)。我想这取决于您的具体需求。使用,记录错误消息。要获得帮助,请查看这些和。无论您使用何种日志记录方法,请执行类似操作。(手动输入可能无法编译)
试试看
{
DoignStuff();
}
捕获(例外情况除外)
{
WriteLine(“调用DoingStuff()Ex:+Ex.ToString()时出现异常);
}
它将从页面名称和方法开始(这是多余的,但会使生活更轻松)
然后它将把EX转换成一个字符串,显示调用堆栈和其他各种好东西,并将其放入日志文件中
注意:您必须在
位置键入页面名称
Log4Net和Elmah也能让生活变得更轻松。
Elmah
可从nuget获得,它是上述库的一部分,在错误处理方面非常重要。当您可以设置企业库日志块时,不必要的代码太多了,一切都为您完成了。
public static class ErrorLog
{
public static void WriteError(Exception ex)
{
try {
string path = "~/error/logs/" + System.DateTime.Now.ToString("dd-MM-yyyy") + ".txt";
if ((!System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(path)))) {
System.IO.File.Create(System.Web.HttpContext.Current.Server.MapPath(path)).Close();
}
using (System.IO.StreamWriter w = System.IO.File.AppendText(System.Web.HttpContext.Current.Server.MapPath(path))) {
w.WriteLine(System.Environment.NewLine + "Log Entry : {0}", System.DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantCulture));
var page = VirtualPathUtility.GetFileName(HttpContext.Current.Request.Url.AbsolutePath);
w.WriteLine("Error in: " + page);
string message = "Message: " + ex.Message;
w.WriteLine(message);
string stack = "StackTrace: " + ex.StackTrace;
w.WriteLine(stack);
w.WriteLine("__________________________");
w.Flush();
w.Close();
}
} catch (Exception writeLogException) {
try {
WriteError(writeLogException);
} catch (Exception innerEx) {
//ignore
}
}
}
}
try
{
DoignStuff();
}
catch( Exception ex)
{
Trace.WriteLine( "Exception in <Page Name> while calling DoingStuff() Ex:"+ ex.ToString() );
}