일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Winform
- windows
- 마이크로소프트
- MSSQL
- 오라클
- aspnet
- MS
- 리포팅서비스
- 이클립스
- 단축키
- 비주얼스튜디오
- IIS
- CONVERT()
- 프로시저
- javascript
- jQuery
- 엑셀
- 태그를 입력해 주세요.
- attr()
- c#
- oracle
- SSRS
- ASP
- microsoft
- 윈폼
- 윈도우
- replace()
- DataGrid
- Excel
- 자바스크립트
- Today
- Total
DJ메탈짱™의 Free Style
[ASP.NET, C#] EMAB (Exception Management Application Block) 본문
[ASP.NET, C#] EMAB (Exception Management Application Block)
뽀&쏭 2020. 12. 25. 16:14애플리케이션에서 발생되는 예외를 처리하기위해 try .. catch를 하다보면 좀더 일반적인 방법과 통합된 그 무언가가 있지않을까 아쉬운 적이 다들 있으셨을겁니다.
오늘 소개하는 EMAB는 Microsoft 에서 patterns & practices 엔터프라이즈 라이브러리로 제공하고 있습니다.
장점은 예외 처리 기능을 별도로 하지않고 재상용이 가능하다는것과 인터페이스 기반으로 해서 쉽게 확장이 가능하다는데 있습니다.
- 변경에는 닫혀있고 확장에는 열려있습니다. ^^;
EMAB 다운로드
최신 버전은 patterns & practices Enterprise Library - June 2005 에서 제공되고 있지만 너무나 복잡한 관계로 예전버전 을 받아서 사용해보도록 하겠습니다.
설치하시면 소스와 문서 그리고 퀵샘플을 보실 수 있습니다.
EMAB.chm을 실행시켜 보면 방대한(?) 도움말이 나옵니다.
- 위 그림은 참고만 하시고 지금부터 하나하나 따라가보도록 하겠습니다.
초간단 EMABWinTest 프로젝트 만들어보기
1. c:\program files\microsoft application blocks for .net\exception management\code\cs\Exception Management Quick Start Samples (CS).sln 을 VS.NET 2003에서 엽니다.
2. ExceptionManagementQuickStartSamples은 처음에 보면 너무나 복잡해보여서 좌절하기 쉬우므로 나중에 보고 우선은 훨씬 더 간단한 예제를 만들어보겠습니다.
3. 새 프로젝트를 하나 추가합니다. 이름은 EmabWinTest로 하고 Windows 응용 프로그램을 선택
4. 참조추가 - 프로젝트에서 Microsoft.ApplicationBlocks.ExceptionManagement를 선택합니다.
5. 여기까지하면 EMAB를 쓸 수 있는 상태로 마무리된겁니다.
6. 타이핑수고를 덜기 위해 네임스페이스를 페이지 상단에 선언.
using Microsoft.ApplicationBlocks.ExceptionManagement;
7. 버튼을 하나 폼에 붙이고 클릭 이벤트를 아래와 같이 만들어 봅니다.
private void button1_Click(object sender,System.EventArgs e)
{
int x , y=0; try
{
x = 5 / y; }
catch(Exception ex)
{
ExceptionManager.Publish(ex);
} }
8. ExceptionManager의 Publish가 static이기 때문에 인스턴스를 따로 안만들고 바로 호출 가능합니다.
9. 이렇게 해서 실행시키면 이벤트 뷰어에 에러가 쌓여있는게 보입니다.
아주 아주 간단하게 적용이 됐네요. ^^
에러를 이벤트로그 대신 파일로 남기고 싶을때는...
1. 파일로그를 처리하는 Publisher를 만드셔야합니다.
2. 클래스 파일을 하나 추가하고 IExceptionPublisher 를 상속받습니다.
3. Publish 메소드를 구현해야하는데 아래와 같이 합니다.
using System;
using System.Text;
using System.IO;
using Microsoft.ApplicationBlocks.ExceptionManagement; namespace EmabWinTest
{
/// <summary>
/// FileExceptionPublisher에 대한 요약 설명입니다.
/// </summary>
public class FileExceptionPublisher :IExceptionPublisher
{
public FileExceptionPublisher()
{
//
// TODO: 여기에 생성자 논리를 추가합니다.
//
}
#region IExceptionPublisher 멤버 public void Publish(Exception exception,
System.Collections.Specialized.NameValueCollection additionalInfo, System.Collections.Specialized.NameValueCollection configSettings)
{
StringBuilder sb = new StringBuilder(); sb.Append("FATAL ERROR:" + Environment.NewLine);
sb.Append(exception.Message); // Write the entry to the log file. using ( FileStream fs = File.Open(@"c:\emabwinlog.txt", FileMode.Create,FileAccess.ReadWrite))
{ using (StreamWriter sw = new StreamWriter(fs))
{
sw.Write(sb.ToString());
}
}
} #endregion
}
}
이제 Custom Publisher는 만들었으니 EMAB가 처리할 수 있도록 알려주는 작업이 필요합니다.
EMAB 소스를 전혀 수정하지 않고도 이 작업이 가능한데 방법은
4. 프로젝트에 응용 프로그램 구성 파일 추가. 이걸하면 app.config 파일 추가 됩니다.
5. 아래와 같이 수정
<?xml version="1.0" encoding="utf-8" ?>
<configuration> <configSections> <!-- EMAB 를 등록(?) --> <section name="exceptionManagement" type="Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManagerSectionHandler, Microsoft.ApplicationBlocks.ExceptionManagement" /> </configSections> <!-- EMAB를 활성화(on) 시키고 있으며 두개의 Publisher를 등록했습니다. --> <exceptionManagement mode="on"> <publisher assembly="Microsoft.ApplicationBlocks.ExceptionManagement"
type="Microsoft.ApplicationBlocks.ExceptionManagement.DefaultPublisher" logname="MyCustomLog" applicationname="My EMABTest App" /> <!-- 이 부분에 우리가 방금 만든 Custom Publisher를 등록하면 됩니다. type은 어셈블리명.클래스명 --> <publisher assembly="EmabWinTest" type="EmabWinTest.FileExceptionPublisher" /> </exceptionManagement> </configuration>
이렇게 한 뒤에 실행하면 C드라이드 루트에 emabwinlog.txt 파일에 로그가 쌓입니다.
뭐 이 정도 했으면 ExceptionManagementQuickStartSamples 예제도 슬슬 이해가 가시기 시작할겁니다.
ASP.NET에서는 어떻게?
윈폼이나 웹폼이나 별반 다를게 없습니다.
app.config = win.config
이 정도만 알면 뭐 그대로 쓰시면 됩니다.
단 권한 문제 (이벤트로그 접근 / 파일 쓰기) 때문에 web.config에 아래 줄을 추가해주시면 됩니다.
(이 방법 말고 또 다른 방법이 더 있는지는 모르겠음)
<system.web>... <identity impersonate="true" userName="administrator" password="XXXXX" /> ... </system.web>
라고 설명이 되있는데 administrator 권한으로 가장하여 실행이 된다고 이해하면 되겠죠.
정리
1. 프로젝트에서 EMAB를 참조
using Microsoft.ApplicationBlocks.ExceptionManagement;
2. 에러 처리 부분에서 ExceptionManager.Publish(ex) 를 호출
catch(Exception ex) {
ExceE
ExceptionManager.Publish(ex);
}
3. 필요하다면 IExceptionPublisher 인터페이스를 구현하여 Custom Publisher를 구현하는 방식으로 확장시켜 나간다.
'일(job) > MS(Microsoft)' 카테고리의 다른 글
[Windows Ver.] Subversion Server Install Guide (서브버전 설치) (0) | 2021.01.31 |
---|---|
Visual SourceSafe 2005 설치 및 연결방법 (Visual Studio2005) (0) | 2021.01.31 |
[ASP.NET] Session Mode (0) | 2020.12.25 |
[ASP.NET] SqlServer 또는 StateServer 세션 모드를 사용하는 경우 웹 팜에서 세션 상태가 손실된다 (0) | 2020.12.25 |
DateTime.ToString 메소드 (날짜포맷) (0) | 2020.12.05 |