Как указать Log4net на его файл конфигурации?

Недавно мы перенесли все наши тесты из NUnit в MsTest. Мы используем Spring.NET для контейнера IOC и Log4Net. Log4Net не может найти log4net.xml, несмотря на то, что он есть в тестовом проекте. Есть идеи что это может быть?

Вот ошибка, которую мы получаем:

Невозможно создать экземпляр класса OurCompany.DataAccess.DocumentManagement.Tests.EmailVerificationTokensAdapterTests.DeleteTests. Ошибка: Common.Logging.ConfigurationException: невозможно создать экземпляр типа Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter. Возможное объяснение - отсутствие нулевого аргумента и одного аргумента Конструкторы NameValueCollection ---> System.Reflection.TargetInvocationException: Исключение было сгенерировано целью вызова. ---> Common.Logging.ConfigurationException: файл конфигурации log4net 'log4net.xml' не существует. at Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter..ctor(свойства NameValueCollection) --- Конец трассировки стека внутренней исключительной ситуации --- в System.RuntimeMethodHandle._InvokeConstructor(метод IRuntimeMethodInfo, аргументы Object[], ref сигнатура SignatureStruct, dectltlpect-типа в RuntimeTy) System.RuntimeMethodHandle.InvokeConstructor(метод IRuntimeMethodInfo, аргументы Object[], подпись SignatureStruct, declaringType RuntimeType) в System.Reflection.RuntimeConstructorInfo.Invoke(привязка BindingFlags invokeAttr, Binder binder, TimeInfoTureTimeTimeTimeTimeTimeTimeTimeTimeTimeTimeTimeTimeTimeTimeTateTNTTTUNTTUNTEFTATETUNTTUNTATETTTUNTATETTUNTTATETUNTTUNTATETTUNTTATETMTTUNTTATETTTTUNTTTTTT)TMTUNTUNTTATETUNTTTTUNTTTTTTTTTTTTTTTTTTTTTTTT)) [Параметры привязки к классу объекта, объектная ссылка] System.RuntimeMethodHandle. BindingFlags bindingAttr, Binder Binder, Object[] args, CultureInfo culture, Object[] активации Attributes) в System.Activator.CreateInstance(Тип тип, BindingFlags bindingAttr, Binder Binder, Object[] args, CultureInfo culture, Object[] активации Attributes) в общем.Logging.LogManager.BuildLoggerFactoryAdapter() --- Конец внутренней трассировки стека исключений --- в Common.Logging.LogManager.BuildLoggerFactoryAdapter() в Common.Logging.LogManager.get_Adapter() в Spring.Testing.Microsoft.AbstractSpringContextTests..ctor() в Spring.Testing.Microsoft.AbstractTransactionalDbProviderSpringContextTests..anyaseT.tsT.InteS.Text.Stext.Stext.SteCon.Stext.Stext.Stext.SteCon.Stext.Site.T..ctor () в SATransactionalIntegrationTestsBase.cs: строка 19 в OurCompany.DataAccess.DocumentManagement.Tests.EmailVerificationTokensAdapterTests.DeleteTests..ctor() в DeleteTests.cs: строка 20

Вот что мы имеем в конфигурационном файле:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="common">
            <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
        </sectionGroup>
    </configSections>

    <common>
        <logging>
            <factoryAdapter type="Common.Logging.Simple.TraceLoggerFactoryAdapter, Common.Logging">
                <arg key="level" value="All" />
                <arg key="showLogName" value="true" />
                <arg key="showDataTime" value="true" />
                <arg key="dateTimeFormat" value="yyyy/MM/dd HH:mm:ss:fff" />
            </factoryAdapter>
        </logging>
    </common>
</configuration>

1 ответ

Решение

Вот фрагмент web.config файл, вот шаги: Вы можете добавить ключ в appSettings это указывает на внешний файл конфигурации, содержащий все настройки Log4net:

 <appSettings>
      <add key="log4net.Config" value="Configs\develop.config" />
  </appSettings>

Вот внешний файл конфигурации:

<log4net>
  <root>
        <appender-ref ref="LogFileAppender" />
  </root>
  ...
</log4net>

В то время как в вашем коде вы будете настраивать XmlConfigurator:

Config.XmlConfigurator.Configure(New FileInfo(ConfigurationManager.AppSettings("log4net.Config")))
Другие вопросы по тегам