ASP.NET Application_Errorエラーログ書き込み

7522 ワード

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; 

            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() + ".html";
                    path = Server.MapPath("~/ErrorLog/") + year + "/" + month;
                    //          
                    if (!System.IO.Directory.Exists(path))
                    {
                        System.IO.Directory.CreateDirectory(path);
                    }
                    System.IO.FileInfo file = new System.IO.FileInfo(path + "/"+filename);        
                   

                    //        ,true    

                    writer = new System.IO.StreamWriter(file.FullName, true);

                    string ip = "  IP:" + Request.UserHostAddress;
                    string line = "-----------------------------------------------------";

                    string log = "<p style='font-size:9pt;'><br>" + line + "<br><font color=red>" + errortime + "  " + erroraddr + "</font><br><font color=green>" + "<br/>" + ip + errorinfo + "<br>" + errorsource + "<br>" + errortrace.Replace("\r
", "<br>") + "</font></p>"; writer.WriteLine(log); } } finally { if (writer != null) writer.Close(); } Response.Redirect("~/ErrorPage.aspx"); } void Session_Start(object sender, EventArgs e) { // } void Session_End(object sender, EventArgs e) { // 。 // : Web.config sessionstate // InProc , Session_End 。 StateServer // SQLServer, 。 } </script>

エラーメッセージを表示するページErrorPage.aspxコード:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ErrorPage.aspx.cs" Inherits="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>
<script language="javascript" type="text/javascript">
// <!CDATA[


// ]]>
</script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table width="600" border="0" align="center" cellpadding="1" cellspacing="0">
					<tr>
						<td  class="table_bgcolor" style="height: 138px">
							<table width="100%" border="1" cellpadding="5" cellspacing="0" class="table_bordercolor">
								<tr bgcolor="#e4e4e4">
									<td class="table_title" style="height: 22px"><STRONG><FONT color="red">    :</FONT></STRONG></td>
								</tr>
								<tr>
									<td height="22">
										<table cellSpacing="0" cellPadding="0" width="100%" border="0">
											<tr>
												<td height="22">
													<asp:Label id="lblMsg" runat="server" Width="100%"></asp:Label>
												</td>
											</tr>
										</table>
									</td>
								</tr>
								<tr>
									<td style="height: 22px">
										<div align="center">
										<asp:Button ID="Button1" Text="   " style="WIDTH: 100p" runat="server" OnClick="Button1_Click" />
									</td>
								</tr>
							</table>
						</td>
					</tr>
				</table>
    </div>
    </form>
</body>
</html>

ErrorPage.aspx.cs
    protected void Page_Load(object sender,EventArgs e){if(!Page.IsPostBack){lblMsg.Text=Application[「error」.ToString()+「

この情報はシステムに記録されています.再試行または管理者に連絡してください.」            Server.ClearError();         }     }     protected void Button1_Click(object sender, EventArgs e)     {         Response.Redirect("~/Login.aspx");     }