관리 메뉴

심재운 블로그

Health Monitoring 로 오류내용 메일로 발송하기 본문

닷넷관련/ASP.NET WEBFORM

Health Monitoring 로 오류내용 메일로 발송하기

재우니 2009. 3. 17. 01:15


Health Monitoring 에 대해서 이야기를 할건데요. 별다른 건 없습니다.

해당 웹페이지에 대해 오류가 발생되면 메일로 발송하도록 하는 시스템을 이야기 하는겁니다.


이를 사용하게 되면 어떤 메시지가 날아올까요? 먼저 메일로 온 내용을 보여드리도록 할게요.



This email is generated from my application.
** 응용 프로그램 정보 **
---------------
응용 프로그램 도메인: 8fa71e87-1-128816908175781250
신뢰 수준: Full
응용 프로그램 가상 경로: /
응용 프로그램 경로: C:\자료실\1.객체지향언어\4.NET35\HealthMonitoring\
컴퓨터 이름: SHIMPARK


** 이벤트 **
---------------
이벤트 코드: 3005
이벤트 메시지: 처리되지 않은 예외가 발생했습니다.
이벤트 시간: 2009-03-17 오전 12:27:01
이벤트 시간(UTC): 2009-03-16 오후 3:27:01
이벤트 ID: c82932ecb9024356964df5286dea372e
이벤트 시퀀스: 20
이벤트 발생 횟수: 1
이벤트 정보 코드: 0

프로세스 정보:
   프로세스 ID: 1696
   프로세스 이름: WebDev.WebServer.exe
   계정 이름: SHIMPARK\Administrator

예외 정보:
   예외 형식: System.NotImplementedException
   예외 메시지: This function has not been implemented.

요청 정보:
   요청 URL: http://localhost:49508/Default.aspx
   요청 경로: /Default.aspx
   사용자 호스트 주소: 127.0.0.1
   사용자: SHIMPARK\Administrator
   인증됨: True
   인증 형식: NTLM
   스레드 계정 이름: SHIMPARK\Administrator

스레드 정보:
   스레드 ID: 4
   스레드 계정 이름: SHIMPARK\Administrator
   가장 사용: False
   스택 추적:    위치: HealthMonitoring._Default.btnThrowError_Click(Object sender, EventArgs e) 파일 E:\articles\Health Monitoring\HealthMonitoring\Default.aspx.cs:줄 9
  위치: System.Web.UI.WebControls.Button0nClick(EventArgs e)
  위치: System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
  위치: System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
  위치: System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
  위치: System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)

  위치: System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)



한글로 자세히 해당 페이지에 대한 오류 상세내역을 메일로 보여주고 있습니다.


이제 위와 같이 메일 발송되도록 어떤 작업들이 있어야 하는지 하나씩 살펴보도록 하죠.


먼저 웹페이지 하나를 만들고 대충 버튼 하나 만들어서 확인 버튼을 선택하면 오류가 발생되도록 하겠습니다.



<form id="form1" runat="server">

    <div>

        <asp:Button ID="btnThrowError" runat="server" Text="Throw An Exception" 

            0nclick="btnThrowError_Click" />    

    </div>

    </form>



코드비하인드에 버튼 이벤트를 기재합니다.



protected void btnThrowError_Click(object sender, EventArgs e)

        {

            throw new NotImplementedException("This function has not been implemented.");

        }



사용자가 오류페이지를 볼 수 있도록 화면도 만들죠. 파일명은 ErrorPage.aspx 입니다.



<form id="form1" runat="server">

    <div>

        An error has been raised.

    </div>

    </form>





이제 웹페이지에서 할 수 있는 것은 전부 다 했습니다. 메일 발송을 위해서 web.config 의 환경파일을 추가해야겠습니다.



<system.net>

<mailSettings>

<smtp deliveryMethod="Network">

<network host="localhost" defaultCredentials="true" port="25"/>

</smtp>

</mailSettings>

</system.net>

<system.web>

<healthMonitoring enabled="true">

<eventMappings>

<clear/>

<add name="All Errors" 

             type="System.Web.Management.WebBaseErrorEvent, System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" 

             startEventCode="0" 

             endEventCode="2147483647"/>        

</eventMappings>

<providers>

<clear/>

<add name="EmailErrorProvider" 

             type="System.Web.Management.SimpleMailWebEventProvider" 

             to="shimpark@gmail.com

             from="shimpark@gmail.com

             buffer="false" 

             subjectPrefix="An error has occured."

             bodyHeader="This email is generated from my application." />

</providers>

<rules>

<clear/>

<add name="Testing Mail Event Providers" 

             eventName="All Errors" 

             provider="EmailErrorProvider" 

             profile="Default" 

             minInstances="1" 

             maxLimit="Infinite" 

             minInterval="00:01:00" 

             custom=""/>        

</rules>

</healthMonitoring>

<customErrors mode="On" defaultRedirect="ErrorPage.aspx"/>

<compilation debug="true">

<assemblies>

<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

</assemblies>

</compilation>

</system.net>



에러가 발생되면 에러페이지로 이동하도록 defaultRedirect 에 오류페이지 경로를 지정했습니다.



<mailSettings>

<smtp deliveryMethod="Network">

<network host="localhost" defaultCredentials="true" port="25"/>

</smtp>

</mailSettings>



현재 예제를 실행한 OS 는 2003 서버이며, SMPT 를 설치했습니다. 별다른 호스트 지정할게 없어서 localhost 로 지정했으며,

기본 자격 증명이 로그인한 사용자나 가장된 사용자의 자격 증명을 하기 위해 defaultCredentials 을 활성화 했습니다.

이에 대한 자세한 내용은 msdn 을 참고하시기 바랍니다.


http://msdn.microsoft.com/ko-kr/library/system.net.credentialcache.defaultcredentials.aspx



<add name="EmailErrorProvider" 

             type="System.Web.Management.SimpleMailWebEventProvider" 

             to="shimpark@gmail.com

             from="shimpark@gmail.com

             buffer="false" 

             subjectPrefix="An error has occured."

             bodyHeader="This email is generated from my application." />



그리고 보내고 받는 메일을 gmail 로 발송 및 수신이 되도록 했습니다. 이 부분을 여러분이 원하는 메일로 설정을 하시면 됩니다.

to 는 받는 메일 주소이며, from 은 보내는 메일주소이므로 참고하시기 바랍니다. 그리고 전자 메일 제목 앞에 추가되는 문자열을 

지정하여 각 공급자 인스턴스에 대해 전자 메일 메시지에 사용자 지정 제목이 포함되도록 하기 위해 subjectPrefix 값에 "An error has occured"  을 추가 했습니다.







위의 속성에 대한 설명은 아래의 msdn 주소를 참고하시기 바랍니다.


http://msdn.microsoft.com/ko-kr/library/y6d9ss59.aspx



이제 환경설정한 부분은 끝이 났습니다. SMTP 설치 부분에 대해 모르시는 분들이 있을 수 있으니 캡쳐 하나 나갑니다.







그리고 SMTP 를 IIS 에서 설치되어 있는 것을 확인하실 수 있습니다. 그리고 SMTP 에 릴리즈를 허용합니다.

저는 localhost 의 ip 인 127.0.0.1 을 추가했답니다.








이제 웹페이지를 실행하고 버튼을 클릭한 다음에 수신된 메일에서 오류를 확인해보시기 바랍니다.











재미없는 글 읽느라.. 아니면 아시는 글이라서 지루하시는 분들이 있다면 ...

다음엔 더 상큰한걸로 올려보도록 하겠습니다. 오늘도 10시 넘게 일을 해서 그런지 이런 글을 쓰고 이미지 캡쳐하는게 왜이리

힘든지 모르겠네요.


그럼 좋은 하루 되시고요..  



감사합니다. posted by 심재운 (shimpark@gmail.com)




0 Comments
댓글쓰기 폼