خطایابی برنامه های Asp.Net و MVC توسط Elmah

شنبه 21 شهریور 1394

در این مقاله نحوه استفاده از ابزار Elmah برای خطایابی و مدیریت آن در برنامه های Asp.net و MVC آشنا خواهید شد.

خطایابی برنامه های Asp.Net و MVC توسط Elmah

Elmah مخفف عبارت Error Logging Modules & Handlers یک ابزار قوی برای خطایابی اکثر برنامه های Asp.net بوده که توسط Wiki هم توصیه شده است. از آنجا که می دانیم شانس گرفتن Exception (استثناء) از برنامه ها هنگام کار بر روی آنها امری مهم است مدیریت آنها میان توسعه دهندگان و برنامه نویسان یک رقابت می باشد. اما اگر یک ابزار که قابلیت دادن اطلاعات از خطاها و استثناءها را داشته باشد می تواند کمک زیادی به  برنامه نویسان کند. به جای آنکه کاربر با صفحه خطای زرد رنگ خطا مواجه شود بهتر است تا با یک صفحه خطای سفارشی روبرو شده و همچنین برنامه نویس به جای استفاده از Try-Catch برای هر متد Elmah برای آنها اطلاعاتی از آن استثناء ها را فراهم می نماید. برای اطلاعات بیشتر راجع به صفحه خطای سفارشی به اینجا مراجعه نمایید.

شما پس از اضافه کردن Elmah به پروژه خود متوجه کاربردهای آن می شوید. Elmah بدون ایجاد تغییرات در کد قابلیت های زیادی را برای ما فراهم می نماید. از آنجا که Elmah شامل Handler ها و ماژول ها می باشد به خوبی از HttpModules ,و Http Handlers پشتیبانی می کند.

همه Exception های کنترل نشده در محیط Elmah گزارش داده می شوند.

می توان exception ها را از طریق Remote گزارش گیری کرد.

Elmah همچنین این قابلیت را برای ما فراهم می کند که گزارش ها را ذخیره کرده و یا آنها را در جدول ذخیره نماید.(SSMS)


    <customerrors mode="On" defaultredirect="/Default/Error">  
    <error statuscode="404" redirect="/Default/NotfoundError">  
    </error></customerrors>  

برای اضافه کردن Elmah به پروژه مانند تصویر زیر روی نام پروژه کلیک راست کرده و Manage Nuget Packages را انتخاب می نماییم.

Elmah را جستجو می کنیم.

پس از پایان نصب package.config را چک کرده و می بینیم که Elmah مانند زیر نصب شده است :

 

همچنین لازم است تا Web.Config را مانند زیر تنظیم نمایید:


    <sectionGroup name="elmah">  
       <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />  
       <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />  
       <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />  
       <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />  
    </sectionGroup> 
<system.web>  
   <authentication mode="None" />  
   <compilation debug="true" targetFramework="4.5.1" />  
   <httpRuntime targetFramework="4.5.1" />  
   <httpModules>  
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />  
   </httpModules>  
   <httpHandlers>  
      <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />  
   </httpHandlers>  
</system.web> 
<system.webServer>  
   <modules>  
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />  
   </modules>  
   <handlers>  
      <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />  
   </handlers>  
</system.webServer>


    <elmah>  
       <security allowRemoteAccess="yes" />// To allow remote access  
    </elmah>  

حالا همه چیز برای برنامه نویس آماده است تا Exception ها را چک نماید. اما چگونه باید به Interface (رابط کاربری) Elmah دسترسی پیدا کنیم.

این ساده است. فقط کافی است پس از آدرس سایت elmah.axd/ را اضافه کنیم و سپس شما لیستی از Error و Exception ها که رخ داده اند مشاهده می کنید.
صفحه می تواند مانند زیر باشد :

ادغام ELMAH به Gmail

برای این کار تغییرات زیر را در Web.Config انجام می دهیم.

ابتدا در قسمت system.webServer/modules کدهای زیر را وارد می کنیم.

<modules runAllManagedModulesForAllRequests="true">  
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />  
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />  
</modules> 

سپس بعد از اضافه کردن ماژول در قسمت system.net/mailSettings نیاز به تنظیمات زیر داریم :
 


    <system.net>  
       <mailSettings>  
         <smtp from="abc@gmail.com">  
           <network host="smtp.gmail.com" port="587" userName="*****" word="***" enableSsl="true" />  
         </smtp>  
       </mailSettings>  
    </system.net>  

 

به خاطر داشته باشید که شما نیاز به وارد کردن Username Gmail دارید. Gmail باهوش است و به آسانی ایمیل را ارسال نمی کند. پس برنامه باید در Gmail لاگین کرده و برای اجازه دادن به برنامه برای ورود به اکانت باید سطح دسترسی را برای آن IP باز بگذاریم.

در نهایت باید در قسمت <Elmah> کدهای زیر را بنویسیم:


    <elmah>  
        <security allowRemoteAccess="yes" />  
        <errorMail from="noreply@demo.com" to="suraj.0241@gmail.com" subject="DEMO Error" async="false" useSsl="true" />  
    </elmah>  

به این ترتیب همه تنظیمات انجام شده است و Elmah به قدر کافی باهوش است تا تنظیمات را متوجه شده وایمیل را به کاربر مشخص شده بفرستد. به خاطر داشته باشید که در قسمت "to" می توانید بیش از یک آدرس ایمیل انتخاب نمایید و آنها را با , (کاما) جدا نمایید.

حال به تصویر زیر نگاه کرده تا متوجه شوید ایمیل چگونه می باشد :

 

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید