Как указать 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")))