.Net Add-In Framework с использованием log4net в надстройке - PullRequest
0 голосов
/ 01 февраля 2012

Я создаю приложение, которое использует надстройки с .Net Add-Ins Framework. Я хочу отслеживать, что происходит внутри надстройки, используя log4net, но я не могу получить зарегистрированные данные для записи в выходной файл. Я успешно использую log4net с хостом.

В сборке info.cs моей надстройки я добавил следующую строку кода:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

Это должно сказать log4net, чтобы получить конфигурацию из файла .config.

Мой app.config для надстройки выглядит так:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" 
             initializeData="UpdateModuleLog.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
  <log4net>
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern 
            value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <root>
      <level  value="INFO"/>
      <appender-ref ref="TraceAppender"/>
    </root>
  </log4net>
</configuration>

Надстройка app.config перемещается в конвейер, как и ожидалось.

В моем дополнении у меня есть следующий код для создания log4net:

    private static readonly log4net.ILog log = log4net.LogManager.GetLogger
        (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

Наконец, я вызываю log4net в своем коде так:

        log.InfoFormat("Starting Update Module Version 1.0.0 for Internationalization Database.");

Проблема в том, что UpdateModuleLog.log никогда не создается. Я ожидал, что он будет создан либо в папке bin хост-приложения, либо в папке надстроек в конвейере, но он не существует ни в одном месте. Я использую TraceAppender, потому что хочу записать все, что записано в Debug или Trace, в один и тот же файл, но если для этого требуется запись в отдельный файл, пусть будет так.

Кроме того, файл журнала для хост-процесса НЕ отражает какую-либо регистрацию, выполненную из надстроек.

1 Ответ

0 голосов
/ 01 февраля 2012

Нашел ответ. В моем app.config отсутствовал этот раздел кода:

  <configSections>
    <section name="log4net"
      type="log4net.Config.Log4NetConfigurationSectionHandler, 
            log4net"/>
  </configSections>
...