2012-08-07 1 views
1

Castle Windsor를 사용하고 로깅 기능을 보유하고있는 구성 파일을 사용하여 시작합니다 (실제로 모든 것을 유지하려고합니다).WindsorContainer 구성 오류 및 로깅 문제

잘못된 구성, 누락 된 종속성 등으로 인해 초기화시 windsor에서 오류가 발생하면 로거가 시작되지 않으므로 어디서나 오류를 작성할 수 없습니다. 여기에 내 코드가 있습니다. :

private static ILogger m_Logger { get; set; } 

    static void Main(string[] args) 
    { 
     try 
     { 
      // Windsor has missing dependencies 
      var container = new WindsorContainer("windsor.xml"); 
      // Did not make it here... 
      var logger = container.Resolve<ILogger>(); 
      m_Logger.Debug("Testing 123"); 
     } 
     catch (Exception) 
     { 
      // Logger was not initialized, null reference exception! 
      m_Logger.Debug("Testing 123"); 
     } 
    } 

내 선택은 무었입니까?

감사합니다. Nir.

+0

실행중인 응용 프로그램 유형은 무엇입니까? ASP.NET? 양식을 얻으시겠습니까? 어떻게 앱을 배포하고 있습니까? 서버에서? 클라이언트 컴퓨터에서? – Steven

+0

서버 쪽, WCF. – nirpi

+0

응용 프로그램을 잘못 구성한 경우 테스트 또는 준비 중에 알아야하지만 응용 프로그램이 시작되지 않고 서비스를 로컬에서 액세스 할 때 스택 추적을 볼 수 있으므로 잡을 필요가 없습니다. – Steven

답변

0

당신은 Windows 이벤트 로그에 기록 할 수 있습니다 :

catch (Exception ex) 
{ 
    const string Source = "MySource"; 
    const string Log = "MyNewLog"; 

    // Create the source, if it does not already exist. 
    if(!EventLog.SourceExists(Source)) 
    { 
     EventLog.CreateEventSource(Source , Log); 
    } 

    // Create an EventLog instance and assign its source. 
    EventLog myLog = new EventLog(); 
    myLog.Source = Source; 

    string eventMessage = string.Empty; 

    while (ex != null) 
    { 
     eventMessage += string.Format("{0}\n{1}\n{2}\n\n", 
      ex.GetType().FullName, 
      ex.Message, 
      ex.SackTrace); 
    } 

    myLog.WriteEntry(eventMessage); 
} 
+0

나는 이것을 로그에 넣고 싶거나 적어도 log4net 윈저 설비를 통해 이벤트 로그에 기록 할 수있는 옵션이있다. 주위에? – nirpi

+0

로거가 제대로 구성되어 있지 않으면 사용할 수 없습니다. 구성이 올바르다면 log4net logging facade를 호출하면됩니다. 컴퍼 지션 루트 내부에서 아무런 문제가 없습니다. – Steven

0

을이 정말 첫 번째 장소에서 IOC 컨테이너를 사용하는 모든 기대를 먹는다. 어쨌든 catch 블록에서 수동으로 logger (예 : log4net)를 만들고 로그 할 수 있습니다.

... 
catch (Exception) 
{ 
    // Create logger here 
    m_Logger = new Log4NetLogger(); // Assuming 'windsor.xml' configured to inject a Log4NetLogger 
    m_Logger.Debug("Testing 123"); 
}