ماژول ها و Handler های مربوط به گزارش گیری خطاها (ELMAH) درASP.NET

در این مقاله ابتدا به توضیح بخش های مختلف ELMAH می پردازیم و کاربرد هر بخش را به صورت جداگانه بیان می کنیم، سپس نحوه به کارگیری آن در پروژه ها را بررسی می کنیم.

ماژول ها و Handler های مربوط به گزارش گیری خطاها (ELMAH) درASP.NET

ELMAH مخفف عبارت Error Logging Modules and Handler به معنای ماژول ها و Handler  های مربوط به گزارش گیری  خطاها می باشد. ELMAH  یکی از آسان ترین بسته های مربوط به گزارش گیری خطا است و می تواند به صورت خودکار در یک پروژه ASP.NET اضافه شود و به کار گرفته شود.

یک بار که ELMAH به درستی نصب و پیکربندی شود، می توانیم در سایر مراحل به سادگی و بدون هیچ تغییری در برنامه ، از آن استفاده کنیم.

ELMAH شامل  سه نوع اصلی زیر می باشد:

HTTP Module : HTTP Module یک کلاس است که event handler را برای یک برنامه HTTP تعریف و مشخص می کند. ELMAH چندین HTTP module  دارد که در زیر سه تا از پرکاربرد ترین این ماژول ها آورده شده است:

ErrorLogModule  : خطاهای مدیریت نشده را در فایل Log (گزارش) ثبت می کند.

ErrorMailModuleError : خطاهای مدیریت نشده حین اجرا را از طریق ایمیل ارسال می کند.

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

HTTP Handler : یک کلاس است که وظیفه تولید markup برای نوع خاصی از درخواست را برعهده دارد. HTTP Handler جزئیات خطا را در قالب یک صفحه وب ، RSS Feed  و یا یک فایل CSV  ایجاد می کند.

Error Log Source : این کلاس به شما اجازه می دهد تا خطاها را در درون پایگاه داده ثبت کنید.

یک پروژه جدید MVC ایجاد کنید.

سپس به Nuget Package Manager بروید و ELMAH را نصب کنید.

بعد از این که ELMAH را نصب کردید، خودش می تواند به صورت اتوماتیک ، فایل را پیکربندی کند.  این کار می تواند استفاده از ELMAH  را تا حدود زیادی آسان کند. کدهای زیر را در فایل config وارد نمایید.

    <configuration>  
        <configSections>  
            <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>  
        </configSections>  
      
        <system.web>  
            <httpModules>  
                <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />  
                <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />  
                <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />  
            </httpModules>  
        </system.web>  
      
        <system.webServer>  
            <modules>  
                <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />  
                <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />  
                <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />  
            </modules>  
        </system.webServer>  
        <elmah>  
            <security allowRemoteAccess="false" />  
        </elmah>  
        <location path="elmah.axd" inheritInChildApplications="false">  
            <system.web>  
                <httpHandlers>  
                    <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />  
                </httpHandlers>  
                <!--   
    <authorization>  
    <allow roles="admin" />  
    <deny users="*" />  
    </authorization>  
    -->  
            </system.web>  
            <system.webServer>  
                <handlers>  
                    <add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />  
                </handlers>  
            </system.webServer>  
        </location>  
    </configuration>  
    If you want to get Exception through mail then add the following line of code.  
    <errorMail from="mohammedibrahim.lj@gmail.com" to="mohammedibrahim.lj@gmail.com" Subject="Application Error" async="true" smtpPort="0" useSsl="true"></errorMail>  
    Enter the above line of code must be added within the  
    <elmah> tag Now we have to config the email account. By using the below excel tags  
        <mailSettings>  
            <smtpdeliveryMethod="Network">  
                <network host="smtp.gmail.com" port="587" userName="Your mail address " password="your password " />  
                </smtp>  
        </mailSettings>  
        </system.net>  

برای این که از درستی عملکرد ELMAH مطمئن شوید، می توانید یک خطا در پروژه ایجاد کنید.

 

به عنوان مثال می توانیم خطایی مانند زیر ایجاد کنیم.

برای این که بتوانیم گزارش خطای ایجاد شده توسط ELMAH را بتوانیم ببینیم، می توانیم در بخش url ، قسمت /elmah.axd را اضافه کنیم.

زمانی که برنامه با خطا مواجه می شود، به صورت اتوماتیک یک ایمیل به آدرس ایمیلی که در برنامه داده اید، ارسال می شود.

دانلود نسخه ی PDF این مطلب