2014-05-20 1 views
5

Я использую NLog для регистрации ошибок, обнаруженных в моем приложении. Я выяснил, как поймать исключения и зарегистрировать их с помощью Logger.ErrorException(), и я выяснил, как регистрировать информацию о событиях контекста с помощью Logger.Log (LogEventInfo). Но я хочу иметь возможность записывать всю эту информацию за один раз, вместо того, чтобы получать две записи журнала за каждое исключение, каждый из которых имеет только половину данных. Heres код:NLog logging Данные LogEventInfo и Exception с одним вызовом

 Exception ex = Server.GetLastError(); 
     Logger logger = LogManager.GetCurrentClassLogger(); 
     LogEventInfo eventInfo = new LogEventInfo(LogLevel.Trace, "Hello from RunJob", logger.Name); 
     eventInfo.Properties["CustomerID"] = "someCustID"; 
     eventInfo.Properties["TargetSite"] "someTargetSite"; 
     logger.Log(eventInfo); //This results in a log entry which contains the values stored in 'CustomerID' and 'TargetSite', but not the details of the exception! 
     logger.ErrorException(ex.Data.ToString(), ex); //this results in a log entry which contains the exception details, but not the event info stored in 'CustomerID' and 'TargetSite'! 

Все, что я хочу для одной записи журнала за исключением пойманной, и запись в журнале должна включать в себя информацию о событии CustomerID и TargetSite.

Вот мой макет nlog.config, в случае, если это помогает:

  Current User ID: ${event-context:CUID}${newline} 
      Target Site: ${event-context:TargetSite}${newline} 
      Exception Type: ${exception:format=Type}${newline} 
      Exception Message: ${exception:format=Message}${newline} 
      Stack Trace: ${exception:format=StackTrace}${newline} 
      Additional Info: ${message}${newline}" 

Любые советы будут оценены! Благодаря

ответ

8

Вам просто нужно установить Exception свойство вашего исключения на LogEventInfo объекта:

Exception ex = Server.GetLastError(); 
Logger logger = LogManager.GetCurrentClassLogger(); 
LogEventInfo eventInfo = new LogEventInfo(LogLevel.Trace, 
    "Hello from RunJob", logger.Name); 
eventInfo.Properties["CustomerID"] = "someCustID"; 
eventInfo.Properties["TargetSite"] "someTargetSite"; 

eventInfo.Exception = ex; //set the exception for the eventInfo 

logger.Log(eventInfo);