2008-08-15 11 views
25

ASP.NET 응용 프로그램에서 오류를 기록하는 가장 좋은 방법을 찾고 있습니다. 예외 및 현재 요청에 대한 자세한 정보와 함께 응용 프로그램에서 오류가 발생하면 전자 메일을받을 수 있기를 원합니다.ASP.NET 응용 프로그램에서 어떻게 오류 (예외)를 기록합니까?

우리 회사에서는 우리 자신의 ErrorMailer를 사용하여 Global.asax Application_Error의 모든 것을 잡았습니다. 그것은 "OK"였지만 매우 융통성이없고 구성 가능하지도 않았습니다.

최근 NLog로 전환했습니다. 훨씬 더 구성이 가능하고, 오류에 대한 다른 대상을 정의하고, 필터링하고, 버퍼링합니다 (아직 시도하지 않았습니다). 그것은 아주 좋은 개선입니다.

그러나 요즘에는 .Net 프레임 워크에 System.Web.Management이라는 전체 네임 스페이스가 있고 web.config의 healthMonitoring 섹션에서 구성 할 수 있다는 것을 알게되었습니다.

.Net 건강 모니터링을 해본 적이 있습니까? 오류 로깅을위한 솔루션은 무엇입니까?

+0

System.Web.Management도 보았지만 사용하지는 않았습니다. 그것이 잘 작동하는지에 대한 피드백을 듣고 싶습니다. –

답변

27

나는 elmah을 사용합니다. 그것은 정말 좋은 기능을 가지고 있으며 여기에 CodeProject 문서가 있습니다. StackOverflow 팀도 elmah를 사용한다고 생각합니다!

+4

작년에 [ELMAH Tutorial] (http://blog.elmah.io/elmah-tutorial/)을 작성했습니다.이 시나리오는 CodeProject 기사보다 자세하게 설명되어 있습니다. – ThomasArdal

0

우리가 작성한 사용자 정의 자체 로그 유틸리티를 사용합니다. 필요한 모든 곳에서 스스로 로깅을 구현해야합니다. 그러나, 그것은 또한 당신이 예외를 넘어서서 많은 것을 포착 할 수있게합니다.

예를 들어 우리의 코드는 다음과 같습니다

Try 
    Dim p as New Person() 
    p.Name = "Joe" 
    p.Age = 30 
Catch ex as Exception 
    Log.LogException(ex,"Err creating person and assigning name/age") 
    Throw ex 
End Try 

우리 로거 우리는 SQL 데이터베이스에 필요한 모든 정보를 기록합니다 이쪽으로. 특정 오류 또는 자주 발생하는 오류를 찾기 위해 DB 수준에서 전자 메일 알림을 설정했습니다. 오류의 출처를 정확하게 식별 할 수 있습니다.

정확하지 않을 수 있습니다. Global.asax와 비슷한 또 다른 접근법은 AOPPostSharp 같은 코드 삽입 기술입니다. 이렇게하면 모든 메소드의 시작과 끝 또는 모든 예외에 대해 사용자 정의 코드를 삽입 할 수 있습니다. 흥미로운 접근 방법이지만 성능 오버 헤드가 심할 수 있습니다.

0

저희 팀은 Apache에서 log4net을 사용합니다. 꽤 가볍고 설치가 쉽습니다. 무엇보다 web.config 파일에서 완전히 구성 할 수 있으므로 코드 설정에 문제가 없으면 web.config 파일을 변경하여 로깅이 완료되는 방식을 완전히 변경할 수 있습니다.

log4net은 데이터베이스, 전자 메일, 텍스트 파일, Windows 이벤트 로그 등 다양한 위치에 대한 로깅을 지원합니다. 우리 팀은 자세한 오류 정보를 데이터베이스에 보내고 팀 전체에 전자 메일을 보내도록 구성했습니다 코드의 어느 부분에서 오류가 발생했는지를 판단 할 수있는 충분한 정보가 있습니다. 그런 다음 우리는 누가 그 코드를 담당하고 있는지를 알게되고 더 자세한 정보를 얻기 위해 데이터베이스로 갈 수 있습니다.

2

저는 엔터프라이즈 라이브러리의 로깅 개체를 사용해 왔습니다. 다른 유형의 로깅 (플랫 파일, 전자 메일 및/또는 데이터베이스)을 가질 수 있습니다. 그것은 꽤 사용자 정의 할 수 있으며 로깅 구성을위한 web.config를 업데이트하기위한 꽤 좋은 인터페이스를 가지고 있습니다. 일반적으로 Global.asax의 On Error에서 내 로깅을 호출합니다.내가 Log4net을 사용하고

Here's a link to the MSDN

+0

1 년 전 MS 엔터프라이즈 라이브러리 로깅을 프로젝트에 사용해야했습니다. 그것은 매우 복잡했고 정확한 세부 사항을 기억할 수는 없지만 로깅 솔루션에서 기대할 수있는 몇 가지 최소한의 기능이 누락되었습니다. Visual Studio 용 추가 기능은 web.config를 올바르게 설정하는 유일한 방법입니다. 그 도구는 당신의 web.config를 다시 포맷하고 그것의 모든 코멘트를 삭제합니다 : ( – TechSavvySam

9

은 치명적인 오류의 세부 사항을 이메일로 구성. 또한 모든 것을 로그 파일에 기록하도록 설정되어있어 문제를 디버그 할 때 매우 중요합니다. 다른 장점은 표준 기능이 원하는 기능을 수행하지 못한다면 필요에 따라 로깅 정보를 처리 할 수있는 사용자 정의 appender를 작성하는 것이 매우 쉽다는 것입니다.

그런데, 나는이 메시지를 표준 log4net 이메일 (페이지, 세션 변수, 쿠키, http 서버 변수에 포함 된 것보다 약간 더 많은 정보가 포함 된 html 전자 메일을 보내는 사용자 정의 오류 처리기와 함께 사용하고있다. 등

이들은 모두 Application_OnError 이벤트에서 처리되며 log4net에서 예외가 로깅되어 지정된 전자 메일 주소로 전자 메일이 전송되며 사용자 지정 오류를 사용하여 처리됩니다 매니저.

코드 호러 블로그 항목 Crash Responsibly에서 처음 들었으며 아직 어떤 프로젝트도 구현하지 않은 것으로 보입니다.

+0

+1 나 자신을 더 잘 말하지 못했습니다! –

0

저는 최근에 모든 데스크톱 응용 프로그램에 사용되는 NLog와 함께 asp.net 웹 서비스를 만들었습니다. Visual Studio에서 디버깅 할 때 로깅이 제대로 작동하지만 IIS로 전환하면 로그 파일이 만들어지지 않습니다. 나는 아직 그 이유를 알지 못했지만 해결책을 찾아야한다는 사실 때문에 저의 asp.net 요구를 위해 다른 것을 시도하고 싶습니다!

2

log4net을 사용하고 어디에서 내가 일까요? 예외가 있습니다. 적절한 수준으로 로그를 남깁니다. 나는 예외를 다시 던지지 않는 경향이 있습니다. 왜냐하면 실제로 좋은 사용자 경험을 허용하지 않기 때문에 현재 상태에서 제공 할 수있는 정보가 적기 때문입니다.

Application_Error도 예상하지 못한 예외를 잡아 내고 log4net을 통해 오류가 치명적인 우선 순위로 기록됩니다 (물론 심각도가 높지 않으므로 404는 정보로 감지되고 기록됩니다).

0

우리는 EnterpriseLibrary.ExceptionHandling.Logging을 사용합니다. 로깅을 완전히 제어 할뿐만 아니라 설정 내에서 Throw/NoThrow 결정을 제어 할 수 있기 때문에 log4net보다 조금 낫습니다.