کنترل و ثبت خطاهای سایت در Asp.net
0 0

کنترل و ثبت خطاهای سایت در Asp.net


کنترل و ثبت خطاهای سایت در Asp.net

در این پست به صورت کامل نحوه کنترل خطاها و ثبت خطاهای سایت در Asp.Net را توضیح می دهیم.

برای این کار وارد پوشه App_Data شوید در صورتی که این پوشه را نداشتید با کلیک راست روی پروژه خود و سپس Add و از گزینه Add ASP.NET Folder پوشه App_Data را به پروژه خود اضافه کنید.

حال داخل پوشه App_Data یک پوشه به نام Logs ایجاد کنید و سپس فایلی به نام Application.log داخل این پوشه ایجاد کنید.

در صورت نداشتن فایل Global.asax آن را به پروژه خود اضافه کنید. در این فایل می توانید تنظیمات زیادی انجام دهید.

یکی از متدهای Global.asax به نام Application_Error است. این متد زمانی اجرا می شود که خطای در سایت اتفاق افتاده باشد.

 کدهای زیر را داخل این متد کپی کنید.

 void Application_Error(object sender, EventArgs e)
    {
        // Code that runs when an unhandled error occurs

        if ((Server != null) && (Server.GetLastError() != null) && (Server.GetLastError().GetBaseException() != null))
        {
            System.Exception ex = Server.GetLastError().GetBaseException();
            string strErrorMessage =
                string.Format("ErrorGlobal:{0}\r\n DataTime:{1}\r\n Path:{2},\r\n User IP:{3}",

                    ex.Message + "HelpLink = " + ex.HelpLink + "Message = " + ex.Message
                    + "Source = " + ex.Source + "StackTrace = " + ex.StackTrace + "TargetSite = " + ex.TargetSite,

                    DateTime.Now,
                    Request.PhysicalPath,
                    Request.UserHostAddress);

            System.IO.StreamWriter oStreamWriter = null;

            try
            {
                //مسیر فایل لاگ
                string strApllicationPath ="~/App_Data/Logs/Application.log";

                string strAppllicationPathName =
                    Server.MapPath((strApllicationPath));

                oStreamWriter = new System.IO.StreamWriter(strAppllicationPathName, true,
                    System.Text.Encoding.UTF8);

                oStreamWriter.WriteLine((strErrorMessage));
            }
            catch
            {
            }
            finally
            {
                if (oStreamWriter != null)
                {
                    oStreamWriter.Dispose();
                    oStreamWriter = null;
                }
            }
        }

    }

در کدهای بالا زمانی که خطا در سایت اتفاق می افتد خطا را به صورت کامل مانند IP کاربر ، صفحه ای که خطا اتفاق افتاده ، تاریخ و ساعت خطا و همچنین متن کامل خطا را در فایل Application.log ذخیره می کنیم.

نکته:

با این روش می توانید داخل کدهای برنامه که از try/catch استفاده کردید در قسمت catch نیز خطا ها را ثبت کنبد.

 try
        {

        }
        catch (Exception ex)
        {
            string strErrorMessage =
                string.Format("ErrorGlobal:{0}\r\n DataTime:{1}\r\n Path:{2},\r\n User IP:{3}",

                    ex.Message + "HelpLink = " + ex.HelpLink + "Message = " + ex.Message
                    + "Source = " + ex.Source + "StackTrace = " + ex.StackTrace + "TargetSite = " + ex.TargetSite,

                    DateTime.Now,
                    Request.PhysicalPath,
                    Request.UserHostAddress);

            System.IO.StreamWriter oStreamWriter = null;

            try
            {
                //مسیر فایل لاگ
                string strApllicationPath = "~/App_Data/Logs/Application.log";

                string strAppllicationPathName =
                    Server.MapPath((strApllicationPath));

                oStreamWriter = new System.IO.StreamWriter(strAppllicationPathName, true,
                    System.Text.Encoding.UTF8);

                oStreamWriter.WriteLine((strErrorMessage));
            }
            catch
            {
            }
            finally
            {
                if (oStreamWriter != null)
                {
                    oStreamWriter.Dispose();
                    oStreamWriter = null;
                }
            }
        }

در کدهای بالا در قسمت try ما چیزی ننوشتم در این قسمت کدهای که احتمال بروز خطا دارد نوشته می شود مانند هنگام اتصال به دیتابیس و در قسمت catch خطای اتفاق افتاده را ثبت می کنیم.

ایجاد صفحات نمایش خطاها

برای نمایش پیفام مناسب برای کاربر برای هر خطا صفحه ای ایجاد می کنیم.

یک پوشه به نام Errors ایجاد کنید و چهار صفحه به صورت زیر ایجاد کنید.

ErrorGeneral.aspx : صفحه نمایش خطاهای عمومی

Error403.aspx : صفحه نمایش خطاهای دسترسی بدون مجوز

Error404.aspx : صفحه نمایش خطاهای صفحه مورد نظر پیدا نشد

Error500.aspx : صفحه نمایش خطاهای سروری

حال به فایل web.config بروید و به صورت زیر مسیر صفحات را مشخص کنید.

<?xml version="1.0"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5.1" />
    <httpRuntime targetFramework="4.5.1" />
    <!--<customErrors mode="Off"></customErrors>-->
    <customErrors mode="On"  defaultRedirect="~/Errors/ErrorGeneral.aspx" >
      <error statusCode="403" redirect="~/Errors/Error403.aspx"/>
      <error statusCode="404" redirect="~/Errors/Error404.aspx"/>
      <error statusCode="500" redirect="~/Errors/Error500.aspx"/>
    </customErrors>
  </system.web>
</configuration>

در کدهای بالا در صورت که می خواهید هنگام طراحی سایت خطا ها را مشاهده کنید کد زیر را فعال کنید و کدهای بعدی را غیر فعال کنید.

<?xml version="1.0"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5.1" />
    <httpRuntime targetFramework="4.5.1" />
    <customErrors mode="Off"></customErrors>
    <!--<customErrors mode="On"  defaultRedirect="~/Errors/ErrorGeneral.aspx" >
      <error statusCode="403" redirect="~/Errors/Error403.aspx"/>
      <error statusCode="404" redirect="~/Errors/Error404.aspx"/>
      <error statusCode="500" redirect="~/Errors/Error500.aspx"/>
    </customErrors>-->
  </system.web>
</configuration>

نکته مهم:

توصیه می شود هنگام انتشار نهایی برنامه mode را به  RemoteOnly  تغییر دهید

دانلود

نویسنده حسین فتحی
گروه مطلب Asp.Net
نوع مطلب سورس کد و آموزش
تاریخ انتشار ۲ تیر ۱۳۹۴
منبع ایران گنج
تعداد نظرات ۰
قیمت کاربران عضو سایت
توضیح توجه:
  • زمانی که روی لینک دانلود کلیک می کنید لینک دانلود به مدت 24 ساعت معتبر خواهد بود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.

نظر / سوال

Captcha