Правильно использоватьнастройки в файле конфигурации приложения - PullRequest
3 голосов
/ 16 октября 2010

Я недавно создал службу Windows. Честно говоря, он регистрирует любые ошибки в журнале приложений. У меня есть следующий код, который делает это:

Dim appLog = New System.Diagnostics.EventLog With {.Source = "MyService"}
appLog.WriteEntry(message, EventLogEntryType.Error, transactionID)

У меня также есть следующее в app.config:

<system.diagnostics>
    <sources>
      <source name="MyService" switchName="DefaultSwitch">
        <listeners>
          <!--<add name="FileLog"/>-->          
          <add name="EventLog"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="DefaultSwitch" value="Information" />
    </switches>
    <sharedListeners>
      <!--<add name="FileLog"
           type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
           initializeData="FileLogWriter"/>-->      
      <add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="MyService"/> 
    </sharedListeners>
  </system.diagnostics>

Я ожидаю, что мой код выше должен работать даже без установки свойства Source в EventLog программно, потому что я уже определил источник в файле конфигурации. Но если я удаляю With {.Source = "MyService"}, тогда я получаю исключение, которое говорит о том, что свойство Source должно быть установлено до вызова метода WriteEntry. Итак, какова цель материала в XML конфигурации?

1 Ответ

3 голосов
/ 03 ноября 2010

Как повезет, я наткнулся на ответ, или хотя бы частичный, работая над другим приложением.Настройки в файле конфигурации имеют значение при использовании объекта My.Application.Log.Например: My.Application.Log.WriteEntry(errMsg) запишет в файл или в программу просмотра событий в зависимости от настройки в app.config.

Таким образом, в этом случае класс EventLog не вызывается напрямую из кода.Это дает мне дополнительную гибкость для «горячей» замены формата журнала из Event Viewer в файл, например, без изменения кода или перекомпиляции.Однако я заметил одну вещь: свойство Name элемента <source> должно быть установлено в «DefaultSource».В противном случае события не регистрируются.Вероятно, есть способ изменить это, но я не видел в этом необходимости, поэтому я не стал больше расследовать.Надеюсь, это кому-нибудь пригодится.

...