asp.net错误日志写入

  1.    当我们一个web项目开发已完成,测试也通过了后,就把他放到网上去,但是,bug是测不完的,特别是在一个大的网络环境下。那么,我们就应该记录这些错误,然后改正。这里,我的出错管理页面是在global.asax里面的,因为里面有一个Application_Error函数,我觉得这个就是管理错误的。其实,asp.net里还有一个方法,就是在 page 里指定出错的页面,由这个页面专门管理,我觉得这个方法也好,但是每次都要到相应的page里指定参数,不过,我觉得应该可以在web.config里配置吧。但是我还是喜欢下面的方法。下面我们就开始吧。
  2. Global.asax代码:
  3. <%@ Application Language="C#" %>
  4. <script runat="server">
  5.     void Application_Start(object sender, EventArgs e) 
  6.     {
  7.         // 在应用程序启动时运行的代码
  8.     }
  9.     
  10.     void Application_End(object sender, EventArgs e) 
  11.     {
  12.         //  在应用程序关闭时运行的代码
  13.     }
  14.         
  15.     void Application_Error(object sender, EventArgs e) 
  16.     { 
  17.         // 在出现未处理的错误时运行的代码
  18.         
  19.             Exception objErr = Server.GetLastError().GetBaseException();
  20.             string error = string.Empty;
  21.             string errortime = string.Empty;
  22.             string erroraddr = string.Empty;
  23.             string errorinfo = string.Empty;
  24.             string errorsource = string.Empty;
  25.             string errortrace = string.Empty;
  26.             error += "发生时间:" + System.DateTime.Now.ToString() + "<br>";
  27.             errortime = "发生时间:" + System.DateTime.Now.ToString();
  28.             error += "发生异常页: " + Request.Url.ToString() + "<br>";
  29.             erroraddr = "发生异常页: " + Request.Url.ToString();
  30.             error += "异常信息: " + objErr.Message + "<br>";
  31.             errorinfo = "异常信息: " + objErr.Message;
  32.             //error +="错误源:"+objErr.Source+"<br>";
  33.             //error += "堆栈信息:" + objErr.StackTrace + "<br>";
  34.             errorsource = "错误源:" + objErr.Source;
  35.             errortrace = "堆栈信息:" + objErr.StackTrace;
  36.             error += "--------------------------------------<br>";
  37.             Server.ClearError();
  38.             Application["error"] = error;
  39.             //独占方式,因为文件只能由一个进程写入.
  40.            System.IO.StreamWriter writer=null;
  41.             try
  42.             {               
  43.                 lock (this)
  44.                 {
  45.                     // 写入日志
  46.                     string year = DateTime.Now.Year.ToString();
  47.                     string month = DateTime.Now.Month.ToString();
  48.                     string path = string.Empty;
  49.                     string filename = DateTime.Now.Day.ToString() + ".txt";
  50.                     path = Server.MapPath("~/Error/") + year + "/" + month;
  51.                     //如果目录不存在则创建
  52.                     if (!System.IO.Directory.Exists(path))
  53.                     {
  54.                         System.IO.Directory.CreateDirectory(path);
  55.                     }
  56.                     System.IO.FileInfo file = new System.IO.FileInfo(path + "/" + filename);
  57.                     //if (!file.Exists)
  58.                     //    file.Create();
  59.                     //file.Open(System.IO.FileMode.Append);        
  60.                     writer = new System.IO.StreamWriter(file.FullName, true);//文件不存在就创建,true表示追加
  61.                     writer.WriteLine("用户IP:" + Request.UserHostAddress);
  62.                     //if (Session["UserName"] != null)
  63.                     //{
  64.                     //    writer.WriteLine("用户名" + System.Web.HttpContext.Current.Session["UserName"].ToString());
  65.                     //}
  66.                     writer.WriteLine(errortime);
  67.                     writer.WriteLine(erroraddr);
  68.                     writer.WriteLine(errorinfo);
  69.                     writer.WriteLine(errorsource);
  70.                     writer.WriteLine(errortrace);
  71.                     writer.WriteLine("--------------------------------------------------------------------------------------");
  72.                     //writer.Close();
  73.                 }
  74.             }
  75.             finally 
  76.             {
  77.                 if (writer != null)
  78.                     writer.Close();
  79.                     
  80.             }    
  81.             Response.Redirect("~/Error/ErrorPage.aspx");
  82.        
  83.     }
  84.     void Session_Start(object sender, EventArgs e) 
  85.     {
  86.         // 在新会话启动时运行的代码
  87.         Session.Timeout = 60;        
  88.         if (Session.IsNewSession)
  89.         {
  90.             lock (this)
  91.             {
  92.                 if (Application["Counts"] != null)
  93.                 {
  94.                     Application["Counts"] = Int32.Parse(Application["Counts"].ToString()) + 1;
  95.                 }
  96.                 else
  97.                 {
  98.                     Application["Counts"] = 1;
  99.                 }
  100.             }
  101.         }
  102.     }
  103.     void Session_End(object sender, EventArgs e) 
  104.     {
  105.         // 在会话结束时运行的代码。 
  106.         // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
  107.         // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
  108.         // 或 SQLServer,则不会引发该事件。
  109.         if (Application["Counts"] != null)
  110.         {
  111.             Application["Counts"] = Int32.Parse(Application["Counts"].ToString())-1;
  112.         }        
  113.     }
  114.        
  115. </script>
  116. 显示出错信息的页面
  117. ErrorPage.aspx代码:
  118. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ErrorPage.aspx.cs" Inherits="Error_ErrorPage" %>
  119. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  120. <html xmlns="http://www.w3.org/1999/xhtml" >
  121. <head runat="server">
  122.     <title>出错信息</title>
  123.     <link href="css/SITE.CSS" type="text/css" rel="stylesheet" />   
  124. </head>
  125. <body>
  126.     <form id="form1" runat="server">
  127.         <asp:Label ID="Label1" runat="server" Width="568px"></asp:Label>
  128.     
  129.     </form>
  130. </body>
  131. </html>
  132. ErrorPage.aspx.cs
  133.  protected void Page_Load(object sender, EventArgs e)
  134.     {
  135.         this.Label1.Text = Application["Error"].ToString();
  136.     }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值