عنوان:

‫نکاتی در مورد ELMAH


نویسنده: سیروان عفیفی
تاریخ: ۱۳۹۱/۰۵/۰۶ ۱:۲۰
آدرس: www.dntips.ir
سفارشی سازی ایمیل ارسالی :
در مورد ELMAH(Erro Logging Module And Handlers) آقای نصیری چندین مطلب نوشته اند ( + و + و ... )
قبل از ارسال ایمیل توسط ELMAH رخدادی به نام Mailing اجرا (Raise) می‌شود. اگر برای این رخداد یک Event Handler ایجاد کنیم، می‌توانیم جزئیات مربوط به خطایی که قرار است ارسال شود را تغییر دهیم. به عنوان مثال می‌توانیم بگوئیم اگر Error ما از نوع Application Exception بود آنرا به آدرس دیگری ارسال کن و .... برای ایجاد یک Event Handler برای رخداد Mailing ابتدا فایل Global.asax رو به پروژه اضافه کنید و کد زیر را به آن اضافه کنید :
void ErrorMailModuleName_Mailing(object sender, Elmah.ErrorMailEventArgs e)
{
        
}
 دقت داشته باشید که در کد فوق به جای ErrorMailModuleName نام  HTTPModule را بنویسید، این ماژول در فایل Web.Config قرار دارد :
<httpModules>     
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />      
</httpModules>
که در کد فوق ErrorMail می‌باشد در نهایت :
 void ErrorMail_Mailing(object sender, Elmah.ErrorMailEventArgs e)
    {
        
    }
به عنوان مثال در کد زیر اگر Error از نوع Application Exception بود Error Log به آدرس sir1afifi@gmail.com نیز ارسال می‌شود :
void ErrorMail_Mailing(object sender, Elmah.ErrorMailEventArgs e)
    {
        if (e.Error.Exception is ApplicationException)
        {
            e.Mail.To.Add("sir1afifi@gmail.com");
        }
    }

ذخیره Error‌ها در دیتابیس SQL SERVER :
ELMAH خطاهای Log شده را در جدولی با نام ELMAH_Error ذخیره می‌کند، اگر به داخل پوشه ELMAH توجه کرده باشید یک فایل با نام SQLServer.sql وجود دارد که حاوی اسکریپت مربوط به ساخت جدول فوق می‌باشد. با اجرای این اسکریپت جدول مربوطه همرا با سه SP با نام‌های ELMAH_GetErrorsXml ، ELMAH_GetErrorXml ،  ELMAH_LogError ساخته می‌شوند. بعد از ساخت جدول مربوطه باید تگ زیر را در فایل Web.Config بنویسیم :
 <errorLog type="Elmah.SqlErrorLog, Elmah" 
            connectionStringName="..." />
connectionStringName هم نام کانکشن استرینگ را در این قسمت قرار می‌دهیم به عنوان مثال با داشتن کانکشن استرینگ زیر :
<connectionStrings>
    <add name="conn" connectionString="Data Source=.;Initial Catalog=test;User ID=user1;Password=123456;"/>
  </connectionStrings>
به این صورت connectionStringName  برابر با مقدار name یعنی conn می‌شود. 

نظرات

  • مهمان در ۱۳۹۱/۰۷/۰۳ ۱۱:۳۰
    برای استفاده از Elmah در یک پروژه MVC باید پکیج Elmah.MVC رو دریافت کنیم یا همون Elmah?
    • وحید نصیری در ۱۳۹۱/۰۷/۰۳ ۱۱:۳۷
      توضیحات بیشتر در اینجا
      • مهمان در ۱۳۹۲/۰۵/۳۰ ۹:۳۱
        با سلام؛ چند سوال:
        چطوری بدون استفاده از ممبر شیپ نتونه هر کسی این آدرس زد این صفحه بیاد. یه جورایی یا پسورد ازش بگیره یا سطح دسترسی براش تعریف کنیم.

        2- در کدوم قسمت فایل وب کانفیگ تغییر بدم که اسم فایل elamh.axd تغییر کند مثلا بشه test.axd
        • وحید نصیری در ۱۳۹۲/۰۵/۳۰ ۹:۳۷
          به این دو سؤال در مطالب پیشنیاز بحث جاری پاسخ داده شده‌اند:
          معرفی ELMAH
          مدیریت خطاها در یک برنامه ASP.NET MVC 
          • مهمان در ۱۳۹۲/۰۵/۳۰ ۱۰:۰
            ممنون آقای نصیری .من خوندم ولی نگفته بودین کدوم قسمت رو تغییر بدیم تا نام elamh بشه. فقط گفته شد تغییر داده شود.
            • وحید نصیری در ۱۳۹۲/۰۵/۳۰ ۱۰:۳۵
              در همان مطلب معرفی عنوان شده، داریم:
               <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
              در اینجا مقدار path را بجای elmah.axd تغییر بدید به هر نام دیگری که علاقمند بودید.
              • مهمان در ۱۳۹۲/۰۵/۳۱ ۱۲:۱۵
                چطوری بدون استفاده از ممبر شیپ نتونه هر کسی این آدرس زد (www.yoursite.com/elmah.axd)این صفحه بیاد. یه جورایی یا پسورد ازش بگیره یا سطح دسترسی براش تعریف کنیم.چون سطح دسترسی من توسط کد نویسی هست
                • وحید نصیری در ۱۳۹۲/۰۵/۳۱ ۱۲:۲۲
                  در همان مطلب پیشنیاز در مورد location بحث شده، یا حداقل اشاره شده (و اگر کدهای آن ذکر نشده، چون یک مبحث مقدماتی است و نه تکمیلی). در یک مبحث تکمیلی فرض بر این است که شما حداقل یک فصل از مباحث ابتدایی Forms Authentication رو مطالعه کردید. مثلا می‌دونید تگ location را باید به چه صورتی تعریف کرد، یا چطور باید Role به آن اضافه کرد:
                  <location path=".............">
                    <system.web>
                      <authorization>
                        <allow roles="Administrators" />
                        <deny users="*" />
                      </authorization>
                    </system.web>
                  </location>