2017-04-20 2 views
1

Elmah를 사용하여 여러 고객의 ASP.net Web Forms 응용 프로그램의 오류를 중앙 오류 데이터베이스에 기록하고 각 오류가 고유 한 응용 프로그램 이름으로 기록되도록하고 싶습니다.Elmah 응용 프로그램 이름 구성

이 설정은 web.config의 elmah.errorLog.applicationName 속성에서 쉽게 설정할 수 있지만 모든 고객은 configSource에 의해 참조되는 appSettings.config 및 connectionStrings.config 파일의 각 시스템에 대한 고유 한 설정을 가진 표준 web.config 파일을 가지고 있습니다. web.config의 file 속성 file 또는 configSource의 사용을 허용하지 않습니다 Web.config의에서 elmahsectionGroup으로

는 어떻게 각 시스템에 고유 ELMAH의 applicationName을 설정할 수 있습니까?

나중에 web.config를 덮어 쓸 때 손실 될 수 있으므로 프로그래밍 방식으로 web.config에서 특성을 설정하고 싶지 않습니다.

Global.asax.Application_Start()에 ErrorLog.ApplicationName 속성을 설정하려고했지만 설정 한 값이 무시되었습니다.

Dim logger As Elmah.ErrorLog = Elmah.ErrorLog.GetDefault(Nothing) 
logger.ApplicationName = "Testing 123" 

어떤 조언을

많은 ELMAH는 우리의 모든 요구에 맞는, 우리는 단지 고유하게 중앙 오류 데이터베이스에 로그온 할 때 오류를 식별 할 수 있어야합니다, 감사하겠습니다.

+0

당신은 그냥 웹에서 다른 어떤처럼이 문제를 해결할 것입니다. 구성 (예 : 연결 문자열 또는 API 키). 해당 배포에 대한 정확한 세부 정보를 삽입하려면 배포 프로세스의 일부로 만들어야합니다 (자동으로 처리 할 수 ​​있습니까?). – mason

+0

집에서 개발 된 기존 사이트 게시 서비스가 있지만 현재 사이트 당 web.config를 사용자 지정할 수는 없으며 모든 것을 외부 구성 파일로 가져 오는 전체 요점은 일반적인 웹을 가질 수있게하는 것이 었습니다 .config는 모든 사이트에 있습니다. – Ted

+0

글쎄, 당신은 당신의 필요를 충족시키기 위해 항상 도구와 프로세스를 수정할 수 있습니다. 그것은 바로 사내 도구가있는 요점입니까? 필요에 맞게 정확하게 사용자 정의 할 수 있습니까? 어쨌든, 엘마 설정을 별도의 파일로 옮기려고 할 때 어떤 일이 일어 났습니까?거기에서 당신을 방해하고있는 것은 무엇입니까? 비록 이것이 현재 [엘마, 그것은 공개 소스입니다] (https://github.com/elmah/Elmah)로는 불가능한 것이지만. 필요에 맞게 수정하거나 PR/Issue를 제출하여 새로운 기능을 추가 할 수 있습니다. – mason

답변

0

this SO post 얼룩을지게 한 후 지금 ELMAH에 대한 설정 외부 설정 파일을 관리했습니다.

<elmah> 
     <errorLog configSource="Config\Elmah\elmahErrorLog.config" />   
     <errorMail configSource="Config\Elmah\elmahErrorMail.config" /> 
     <errorFilter configSource="Config\Elmah\elmahErrorFilter.config" />   
     <security allowRemoteAccess="false" /> 
    </elmah> 

그 내용의 다음과 같다;

web.configelmah 부분은 다음과 같다 elmahErrorLog.config :

<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ErrorLog" applicationName="My Unique Application Name" /> 

elmahErrorFilter.config는 (이 설정은 로컬 호스트 요청에 대해 전자 메일 알림을 방지) :

<errorFilter> 
    <test> 
    <and> 
     <equal binding="Context.Request.IsLocal" value="True" type="Boolean" /> 
     <regex binding="FilterSourceType.Name" pattern="mail" /> 
    </and> 
    </test> 
</errorFilter> 

elmahErrorMail.config :

<errorMail from="foo" 
      to="foo" 
      subject="My Exception - {0}" 
      async="false"   
      smtpServer="foo" 
      userName="foo" 
      password="foo"> 
</errorMail> 
1

배포 시스템에서 고객별로 개별 앱 설정을 허용하는 경우 ELMAH에서 오류 필터링을 사용하여 앱 설정의 애플리케이션 이름으로 모든 오류를 보완 할 수 있습니다. 자세한 내용은 블로그 게시물 (Enrich ELMAH errors using error filtering hook)을 확인하십시오.

즉, 당신은 모든 오류를 닫고 설정에서 응용 프로그램 이름을 포함한 새로운 오류 로그 :

void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs args) 
{ 
    var httpContext = args.Context as HttpContext; 
    if (httpContext != null) 
    { 
     var error = new Error(args.Exception, httpContext); 
     error.ApplicationName = ConfigurationManager.AppSettings["AppName"]; 
     ErrorLog.GetDefault(httpContext).Log(error); 
     args.Dismiss(); 
    } 
} 
+0

정말 감사합니다. Thomas. 몇 가지 포인트, 여기에 ApplicationName을 설정할 때 예외에 대한 AllXml 데이터에 추가되었지만 응용 프로그램 필드 자체가 설정되어 있지 않습니다. 이 필드를 업데이트 할 수있는 방법이 있습니까? 또한 여기에 오류에 사용자 정의 데이터를 추가 할 수있는 방법이 있습니까? 다시 한 번 감사드립니다! – Ted

+0

네 말이 맞아, 방금 해봤 어. 응용 프로그램 이름은 유일한 방법으로이 방법으로 설정할 수 없습니다. (유일한 대안은 코드에서 ELMAH를 구성하는 것입니다. 다음은 elmah.io와 함께 수행하는 예제입니다. 그러나 Elmah.Io.ErrorLog를 로그로 대체하십시오. 사전을 만들 때 appName이라는 키를 앱 설정의 값과 함께 추가하면 트릭을 수행해야합니다. – ThomasArdal