误人子弟

先做人,再做技术
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Global.asax

Posted on 2010-09-25 11:52  误人子弟  阅读(188)  评论(0编辑  收藏  举报

<%@ 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;
    
        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);
                writer = new System.IO.StreamWriter(file.FullName, true,Encoding.UTF8);//文件不存在就创建,true表示追加
                writer.WriteLine("用户IP:" + Request.UserHostAddress);
                writer.WriteLine(errortime);
                writer.WriteLine(erroraddr);
                writer.WriteLine(errorinfo);
                writer.WriteLine(errorsource);
                writer.WriteLine(errortrace);
                writer.WriteLine("--------------------------------------------------------------------------------------");
            }
        }
        finally
        {
            if (writer != null)
                writer.Close();
            //跳转道自定义的错误页面
            Response.Redirect("~/Error/Default.aspx");

        }
    }

    void Session_Start(object sender, EventArgs e)
    {
        // 在新会话启动时运行的代码

    }

    void Session_End(object sender, EventArgs e)
    {
        // 在会话结束时运行的代码。
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
        // 或 SQLServer,则不会引发该事件。

    }
      
</script>