2008-10-25 4 views
3

현재 내부적으로 많은 사용자 지정 응용 프로그램이있는 회사에서 일하고 있습니다. 현재 여러 가지 기준이 없습니다. 나는이 프로그램 (대부분은 asp.net)에서 일어나는 오류를 기록/추적하는 방법을 구현하고 싶다.라이브/프로덕션 웹 응용 프로그램의 오류 추적

현재이 문제는 응용 프로그램 오류 메서드의 Global.asax에서 처리 할 생각입니다. 먼저 오류 로그/추적 데이터베이스에 정보를 저장하려고 시도하고 오류가 발생하면 전자 메일을 보내보십시오.

오류 메시지와 다른 응용 프로그램 변수 (페이지, 사용자 이름 등)에서 어떤 유형의 정보를 얻는 것이 가장 유용합니다.

현재 두 개의 테이블을 사용하여 일반 오류 및 응용 프로그램 정보를 얻으려는 시도와 예외 정보를 보유하는 두 번째 테이블을 사용하려고합니다. 이는 하나의 응용 프로그램 수준 예외에서 발생할 수있는 내부 예외를 처리하는 일대 다 관계입니다.

나는 많은 세부 사항을 놓치고 있으며이 문제를 해결하기위한 전략을 듣고 싶습니다.

답변

1

제프 앳 우드는 내가 가능한 한 많은 정보를 수집하려고 시도합니다

CodeProject에보고해야한다 훌륭한 예외 처리기를 썼다. 오류

의 스택 정보 세션 정보 위치 나는 것 또한 설치 응용 프로그램이 시스템에 예외 정보를 저장 부르는 웹 서비스.

0

실제로 솔루션을 꽤 잘 생각한 것 같습니다.

웹 개발 샵에서 일하기 때문에 오류를 기록하는 것 이외에 db 쿼리 오류 등의 시스템 치명적인 오류도 이메일로 전송되므로 즉시 해결할 수 있습니다. .

각 응용 프로그램에서 발생하는 각 오류 및 전자 메일에서 원하는 관련 정보에 대한 정보를 매일 제공하는 전자 메일로 보내는 것이 좋습니다.

오류의 타임 스탬프와 전체 텍스트를 포함하여 모든 오류를 해당 응용 프로그램의 단일 테이블에 기록합니다 (물론 데이터베이스가 모두 포함 된 응용 프로그램에서 작업 할 때 더 쉽게 수행 할 수 있습니다). 이메일로도 전송 된 예외 메시지.

예외 메시지에는 함수 추적이 포함되어 있으므로 원래 호출 함수와 스택의 모든 함수에 대한 파일 및 줄 번호를 알 수 있습니다. 이렇게하면 주어진 버그를 매우 쉽게 다시 추적 할 수 있습니다.

+0

DB에 모든 것을 보관하는 문제는 DB 자체에 오류가있는 경우 시스템에 삽입 할 수 없으므로 일상 보고서에 오류가 표시되지 않는다는 것입니다. :-) – balexandre

0

데이터베이스 로깅이 실패하면 서버의 이벤트 로그 또는 Log.txt 파일에 쓸 수 있습니다. 여기서 선택하는 부분은 웹 서버에 대한 액세스 권한이 있는지 여부에 따라 결정됩니다.

빠른 응답이 필요한 경우 오류를 보내는 전자 메일을 보내는 것이 좋습니다. 그러나 그들을 통해 스캔 할 오류 목록이 없습니다.

사용자 정보 (ID, 사용 가능한 경우 이름), 모든 세션 변수, 모든 양식 변수를 포함하는 속성을 사용하여 특수한 맞춤 예외 클래스를 생성하여 양식을 채 웁니다. 사용자가 입력 됨), 오류가 발생한 스택 추적 (일부 페이지, 어떤 클래스, 어떤 메소드)의 표시가 표시됩니다. 또한 호출 된 저장 프로 시저의 이름과 매개 변수를 보내거나 SQL 자체를 포함하십시오. 또한 모든 예외 속성 (스택 추적 등). 그리고 DisplayMessage와 InternalMessage 필드. DisplayMessage가 사용자에게 표시됩니다. InternalMessage는 로그에 기록되고 디버그 모드에있을 때 사용자 정의 오류 페이지에 표시됩니다.

기본 페이지에서 Page_Error로 로그인하고 Application_Error에서 오류 방지로 로그인합니다.

가끔 이메일 주소 (또는 배포 목록)를 포함하도록 web.config에 키 - 값 쌍을 추가합니다. 해당 키에 vue가 있으면 알림 전자 메일이 전송됩니다. 가치가 없다면, eomail은 보내지지 않습니다. 그런 다음 테스트 또는 초기 생산 과정에서 문제에 대한 즉각적인 개인 통보를받을 수 있습니다. 초기 기간이 지나면 web.config에서 전자 메일 주소를 제거합니다.

1

이것은 내가하는 일이며, 이메일 문제 때문에 여전히 버그가 있습니다.

DB에 아무 것도 보관하지 마십시오. DB에 오류가있는 경우 논리적으로 DB 원인에 오류가 없으므로 삽입이 실패합니다! [응용 프로그램 이름] [타임 스탬프 : DDMMYYYY HHMMSS] 메시지 : 응용 프로그램, 오류 메시지, 스택 추적 정보

그래서 나는 [email protected]

주제 같은 특별한 이메일 주소로 이메일을 보내 Referrer 같은 사용자 이름 및 서버 변수와 같은 세션 변수.

하는 ASP.NET 개발자의 가장 친한 친구는 당신이 전화 무엇인지, 무엇이 잘못되었는지 알 수 있다고 여기 어디가 호출되었으며, 스택 추적 정보입니다.

이 시스템에있는 유일한 문제은 전자 메일에 문제가 있거나 (전자 메일을 보낼 때 예외가 있음) 아무 것도받지 못한다는 것과 그 때문에 월간 XML 파일에 추가하기 시작한 것입니다 [ errorLog_mmm_yyyy.xml]을 작성하고 그리드 뷰에 XML을로드 한 간단한 "드래그 앤 드롭"페이지를 만들어서 오류를 확인하고 싶었습니다.

try 
{ 
    // production code 
} 
catch(Exception ex) 
{ 
    Utilities.Mail.SendError(ex); 
} 

또는 가장 좋은 방법 : Global.asax에있는 함으로써 Application_Error에 추가

<%@ Application Language="C#" %> 
<%@ Import Namespace="System.Diagnostics" %> 
<script language="C#" runat="server"> 
void Application_Error(object sender, EventArgs e) 
{ 
    //get reference to the source of the exception chain 
    Exception ex = Server.GetLastError().GetBaseException(); 

    //log the details of the exception and page state to the 
    //Windows Event Log 
    EventLog.WriteEntry("myWebApplication name", 
    "MESSAGE: " + ex.Message + 
    "\nSOURCE: " + ex.Source + 
    "\nFORM: " + Request.Form.ToString() + 
    "\nQUERYSTRING: " + Request.QueryString.ToString() + 
    "\nTARGETSITE: " + ex.TargetSite + 
    "\nSTACKTRACE: " + ex.StackTrace, 
    EventLogEntryType.Error); 

    Utilities.Mail.SendError(ex); 
} 
</script> 

을 코드로 이벤트 로그에 오류를 추가 위에, 나는에 오류를 추가 SendError (Exception) 함수의 XML 파일.

+0

서버의 이벤트 로그에 액세스 할 수 있다고 가정하고 주기적으로 살펴보아야합니다 .-) –

3

의 저자입니다.

1

https를 통해 도착했을 가능성이있는 기밀 정보를 기록 할 때 매우주의하십시오. 사용자는 엔드 투 엔드로 암호화 될 것으로 기대합니다 (법적 요구 사항 일 수 있음). 일반 이메일을 통해 보내지 않도록하십시오. 일반적으로

나는 등 GET, 게시, 쿠키, 양식 상태 (ASPNET에서), 사용자 에이전트, 다른 헤더, 날짜/시간, 서버 시스템을 포함하여 모든 요청을 기록 말할 것

하지만 경우에 따라

그 영구적으로 기록하지 않아도되는 정보 (예 : 신용 카드 번호가 결제 제공자에게 전달됨)가 기록 될 수 있습니다. 전자 메일로 보내면 더 안 좋습니다.

HTTPS가 켜져 있는지 확인하는 것이 좋습니다. 그렇다면이 문제를 피하기 위해 기록하는 정보량을 줄이십시오. 필드가 비었거나 비어 있는지 여부를 알리기 위해 문자열을 보냈습니다.

2

로그 라이브러리 (예 : Log4Net)를 사용하는 경우 코드에서 단일 로그 호출을하는 동안 전자 메일, DB, 파일, 이벤트 로그 등에 로그하는 다양한 로깅 애 퍼더를 설정할 수 있습니다. 이 post은 시작하는 데 필요한 모든 것을 다룹니다.

여기에 ASP.NET health monitoring도 있습니다.

편집 : 또 다른 포스터 ELMAH는 ASP.NET 오류를 기록하는 데 유용하며 실행중인 응용 프로그램에 동적으로 '주입'될 수 있습니다.

0

Clearwind Consulting에서 자체적으로 작성한 웹 사이트 오류보고 응용 프로그램에 대해 좌절감을 나타 냈습니다. 무료이며 내부적으로 프로젝트에 사용합니다. 전체 오류 코드, 브라우저 유형, 역 추적, 오류를 유발 한 코드의 스 니펫, 오류 빈도가 30 일 이상 그래프로 표시된 것과 같은 완전한 오류 정보를 제공합니다. Clearwind에서 웹 응용 프로그램 개발을 수행합니다. 우리는 웹 사이트에 대해 효과적으로 사용할 수있는 실제 데이터를 제공 할 수있는 도구가 필요했습니다.

웹 사이트에 오류가 발생했을 때 알림을받는 방법을 선택할 수 있습니다. RSS, 이메일 또는 어떤 방식 으로든 가장 잘 작동하는 방법을 사용하여 오류 알림을받을 수 있습니다. 그리고 네, 음료를 마시 며 아이폰에 오류를 보낼 수 있습니다. JSON, RoR, XML, CSV 등을 사용할 수 있도록 Django로 작성되었습니다. 데이터에 태그를 지정하거나 서식을 지정하려는 경우 아니면 그냥 웹 사이트를 방문하십시오.

원한다면 www.areciboapp.com을보십시오.

무료이며, 웹 사이트에 쉽게 추가 (또는 제거)되어 실제 정보를 제공하여 404가 아닌 오류를 수정할 수 있습니다. 그냥 초대장을 보러 당신과 당신의 웹 사이트를 도울 수 있는지 확인하십시오. 우리는 그렇게 생각합니다.

0

다른 로깅 & 알림뿐만 아니라 서버의 사용자 지정 이벤트 로그에 로그하는 것이 좋습니다. 오류가 인프라 문제로 인해 발생한 경우 동일한 문제로 인해 오류 처리기가 전자 메일을 보내거나 데이터베이스에 저장하지 못할 수도 있습니다.