2015-02-25 6 views
1

Я пытаюсь использовать обработчик исключений ведения журнала из Enterprise Library, но время от времени, когда я обновляю страницу (очевидно), я получить эту ошибку:Блок приложений регистрации журналов предприятия - System.InvalidOperationException: LogWriter уже установлен

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
Exception Details: System.InvalidOperationException: The LogWriter is already set. 

код

protected void Page_Load(object sender, EventArgs e) 
     { 
      Logger.SetLogWriter(new LogWriterFactory().Create()); 
      LogEntry entry = new LogEntry(); 
      entry.Message = "I am logging"; 
      Logger.Write(entry); 

      if (!Page.IsPostBack) 
      { 
      } 
     }   

Стек след

[InvalidOperationException: The LogWriter is already set.] 
Microsoft.Practices.EnterpriseLibrary.Logging.Logger.SetLogWriter(LogWriter logWriter, Boolean throwIfSet) +165 
ASPUserManager.Presentation.AspNetUI.GridView.Page_Load(Object sender, EventArgs e) in \AspNetUI\GridView.aspx.cs:20 
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51 
System.Web.UI.Control.OnLoad(EventArgs e) +92 
System.Web.UI.Control.LoadRecursive() +54 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772 

Я думаю, может быть, я должен проверить, установлен ли LogWriter?

Я новичок в блоке приложений регистрации журналов предприятия, и я не уверен, как это исправить, есть ли у кого-нибудь идеи?

ответ

4

Вам нужно всего лишь один раз загрузить блок: один раз, когда установлен LogWriter, он хранится внутри и используется для последующих вызовов Write(). Обычно вы делаете это при запуске приложения (например, в global.asax Application_Start).

protected void Application_Start() 
{ 
    Logger.SetLogWriter(new LogWriterFactory().Create()); 
} 

Приведенный выше код загружает конфигурацию и устанавливает LogWriter. Теперь на вашей странице вы можете вызвать Logger.Write().

Непосредственно SetLogWriter принимает логическое значение, указывающее, следует ли бросать, если LogWriter уже установлен, чтобы вы могли переопределить это поведение throw.

Однако в вашем случае вы не хотите делать это в Page_Load. Это может привести к ошибке, которую вы видите, но в многопоточной среде (например, в веб-приложении) вы, вероятно, увидите другое странное поведение, потому что SetLogWriter сбрасывает внутреннюю конфигурацию, и у вас могут быть проблемы с блокировкой файлов или другие проблемы из-за расположенный LogWriter.

Источник: entlib forums

2

Вы должны установить logwritter ложные Logger.SetLogWriter (logWriterFactory.Create(), ложные);

По умолчанию throwIfSet установлен в значение true и генерирует ошибку, если уже установлен logwriter.