zoukankan      html  css  js  c++  java
  • asp.net错误日志写入

    当我们一个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();
        }

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

  • 相关阅读:
    获取web应用路径 // "/" 表示class 根目录
    C++ Knowledge series Inheritance & RTTI & Exception Handling
    ATL
    GCC & Maker
    NoSQL(Not Only SQL)
    ECMAScript Regex
    C++ Knowledge series Conversion & Constructor & Destructor
    Cloud Computing
    C++ Knowledge series STL & Const
    Java Knowledge series 7
  • 原文地址:https://www.cnblogs.com/ChinaZhao/p/5802000.html
Copyright © 2011-2022 走看看