当我们一个web项目开发已完成,测试也通过了后,就把他放到网上去,但是,bug是测不完的,特别是在一个大的网络环境下。那么,我们就应该记录这些错误,然后改正。这里,我的出错管理页面是在global.asax里面的,因为里面有一个Application_Error函数,我觉得这个就是管理错误的。其实,asp.net里还有一个方法,就是在 page 里指定出错的页面,由这个页面专门管理,我觉得这个方法也好,但是每次都要到相应的page里指定参数,不过,我觉得应该可以在web.config里配置吧。但是我还是喜欢下面的方法。下面我们就开始吧。
Global.asax代码:
<%@ Application Language="C#" %>

<script runat="server">

void Application_Start(object sender, EventArgs e) 
    {
        // 在应用程序启动时运行的代码

}
    
    void Application_End(object sender, EventArgs e) 
    {
        //  在应用程序关闭时运行的代码

}
        
    void Application_Error(object sender, EventArgs e) 
    { 
        // 在出现未处理的错误时运行的代码
        
            Exception objErr = Server.GetLastError().GetBaseException();
            string error = string.Empty;
            string errortime = string.Empty;
            string erroraddr = string.Empty;
            string errorinfo = string.Empty;
            string errorsource = string.Empty;
            string errortrace = string.Empty;

error += "发生时间:" + System.DateTime.Now.ToString() + "<br>";
            errortime = "发生时间:" + System.DateTime.Now.ToString();

error += "发生异常页: " + Request.Url.ToString() + "<br>";
            erroraddr = "发生异常页: " + Request.Url.ToString();

error += "异常信息: " + objErr.Message + "<br>";
            errorinfo = "异常信息: " + objErr.Message;

//error +="错误源:"+objErr.Source+"<br>";
            //error += "堆栈信息:" + objErr.StackTrace + "<br>";
            errorsource = "错误源:" + objErr.Source;
            errortrace = "堆栈信息:" + objErr.StackTrace;
            error += "--------------------------------------<br>";
            Server.ClearError();
            Application["error"] = error;

//独占方式,因为文件只能由一个进程写入.
           System.IO.StreamWriter writer=null;
            try
            {               
                lock (this)
                {
                    // 写入日志
                    string year = DateTime.Now.Year.ToString();
                    string month = DateTime.Now.Month.ToString();
                    string path = string.Empty;
                    string filename = DateTime.Now.Day.ToString() + ".txt";
                    path = Server.MapPath("~/Error/") + year + "/" + month;
                    //如果目录不存在则创建
                    if (!System.IO.Directory.Exists(path))
                    {
                        System.IO.Directory.CreateDirectory(path);
                    }
                    System.IO.FileInfo file = new System.IO.FileInfo(path + "/" + filename);
                    //if (!file.Exists)
                    //    file.Create();
                    //file.Open(System.IO.FileMode.Append);        
                    writer = new System.IO.StreamWriter(file.FullName, true);//文件不存在就创建,true表示追加
                    writer.WriteLine("用户IP:" + Request.UserHostAddress);
                    //if (Session["UserName"] != null)
                    //{
                    //    writer.WriteLine("用户名" + System.Web.HttpContext.Current.Session["UserName"].ToString());
                    //}
                    writer.WriteLine(errortime);
                    writer.WriteLine(erroraddr);
                    writer.WriteLine(errorinfo);
                    writer.WriteLine(errorsource);
                    writer.WriteLine(errortrace);
                    writer.WriteLine("--------------------------------------------------------------------------------------");
                    //writer.Close();
                }
            }
            finally 
            {
                if (writer != null)
                    writer.Close();
                    
            }    
            Response.Redirect("~/Error/ErrorPage.aspx");

}

void Session_Start(object sender, EventArgs e) 
    {
        // 在新会话启动时运行的代码
        Session.Timeout = 60;        
        if (Session.IsNewSession)
        {
            lock (this)
            {
                if (Application["Counts"] != null)
                {
                    Application["Counts"] = Int32.Parse(Application["Counts"].ToString()) + 1;
                }
                else
                {
                    Application["Counts"] = 1;
                }
            }
        }
    }

void Session_End(object sender, EventArgs e) 
    {
        // 在会话结束时运行的代码。 
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
        // 或 SQLServer,则不会引发该事件。
        if (Application["Counts"] != null)
        {
            Application["Counts"] = Int32.Parse(Application["Counts"].ToString())-1;
        }        
    }
       
</script>

显示出错信息的页面
ErrorPage.aspx代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ErrorPage.aspx.cs" Inherits="Error_ErrorPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>出错信息</title>
    <link href="css/SITE.CSS" type="text/css" rel="stylesheet" />   
</head>
<body>
    <form id="form1" runat="server">
        <asp:Label ID="Label1" runat="server" Width="568px"></asp:Label>
    
    </form>
</body>
</html>

ErrorPage.aspx.cs
 protected void Page_Load(object sender, EventArgs e)
    {
        this.Label1.Text = Application["Error"].ToString();
    }

这篇源于网络,网址已经忘记,敬请谅解!

asp.net错误日志写入的更多相关文章

  1. 手把手教你,C#.Net如何用Log4net把错误日志写入到SQLite数据库中

    在项目中,我们往往会有把错误日志记录下来的习惯,这样有利于当网站发布后,能第一时间找到错误的所在地,以及错误的原因,以便于我们第一时间纠错.往往我们会把错误日志直接写到txt文本中,虽然操作简单,但是 ...

  2. 错误日志写入到本地磁盘(lock 队列)

    今天照常在b站上看看编程:看到有讲错误日志处理的,自己没写过日志,就看看了看: 主要是在讲的时候牵扯到了队列和lock的知识点:这方面知识自己了解的更少,那就记录一下.

  3. ASP.NET Application_Error错误日志写入

    一个web项目开发已完成,测试也通过,但是,bug是测不完的,特别是在一个大的网络环境下.那么,我们就应该记录这些错误,然后改正.这里,我的出错管理页面是在global.asax里面的,利用里面的Ap ...

  4. MySQL8.0错误日志Error log

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 理论知识 错误日志内容 错误日志包含mysqld启动和关闭的时间信息,还包含诊断消息,如服务器启动和关闭期间以及服务器运行 ...

  5. asp.net 添加错误日志

    在开发程序中,错误日志很有必要.今天就把使用到的添加错误日志,记录下来,方便以后查看 利用的asp.net错误处理机制 Application_Error 贴出代码 protected void Ap ...

  6. ASP.NET Log4Net日志的配置及使用,文件写入

    Log4net是Apache log4j框架在Microsort.NET平台实现的框架. 帮助程序员将日志信息输出到各种目标(控制台,数据库,文件等) 1.新建一个ASP.NET项目 2.新建一个 l ...

  7. Asp.Net MVC中记录错误日志保存到本地txt文件

    为了方便查询系统出错弄个错误日志出来对于维护运维来说是很有必要的. 1.在Asp.Net MVC项目中的App_Start添加一个用于处理异常类的文件ErrorLog让他继承HandleErrorAt ...

  8. ASP.NET MVC中错误日志信息记录

    MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public clas ...

  9. ASP.NET - 记录错误日志

    不需要像log4net/Nlog/Common Logging配置,简单好用. 不用增加声明logger对象,可记录当前执行状况. 可以定义 维护功能模板的开发人员,以便用功能模块对于开发人员. 出处 ...

随机推荐

  1. uboot总结:uboot配置和启动过程3(config.mk分析)

    说明:文件位置:在uboot的目录下,文件名为:config.mk.是一个makefile文件,以后会被主Makefile调用. 它的主要作用的是: (1)具体的设置交叉编译工具链接(主Makefil ...

  2. 使用iOS8 WKWebView的浏览器模块,脉冲动画层-b

    KINWebBrowser是一个可嵌入app的浏览器模块. 它使用iOS 8的 WKWebView API编写,同时在iOS 7上使用UIWebView来兼容. 测试环境: Xcode 6.0 iOS ...

  3. string.Format 日期格式化

    String.Format日期的格式化例子: DateTime dt = DateTime.Now;//2010年10月4日 17点05分 string str = ""; //s ...

  4. 转:100个高质量Java开发者博客

    原文来自于:http://www.importnew.com/7469.html ImportNew注:原文中还没有100个.作者希望大家一起来推荐高质量的Java开发博客,然后不段补充到这个列表.欢 ...

  5. 转:2014 年 15 款新评定的最佳 PHP 框架

    原文来自于:http://blog.jobbole.com/59999/ 原文出处: codegeekz   译文出处:oschina   欢迎分享原创到伯乐头条 通常,框架都会被认为是帮助开发者快速 ...

  6. nosql db and javascript performance

    http://blog.csdn.net/yiqijinbu/article/details/9053467 http://blog.nosqlfan.com/tags/javascript http ...

  7. 如何给Qlabel添加clicked属性(覆盖mousePressEvent,处理QMouseEvent消息,反正是软绘制,想怎么样就怎么样)

    clickedLabel.h #ifndef CLICKLABEL_H #define CLICKLABEL_H #include <QLabel> #include <QMouse ...

  8. bzoj1978

    朴素的算法是O(n2logn)观察这个算法,似乎很难在进行优化我们就要换一种思路考虑到一个数的约数总不是很多,穷举约数也是可以在O(sqrt(x))的时间内完成的并且注意到,能否继续往下选数,只在于最 ...

  9. HTML全局属性

    属性 描述 accesskey 规定激活元素的快捷键. class 规定元素的一个或多个类名(引用样式表中的类). contenteditable 规定元素内容是否可编辑. contextmenu 规 ...

  10. hdu 4619 二分图最大匹配 ——最大独立集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4619 #include <cstdio> #include <cmath> # ...