Log4Net в C # DLL не может загрузить конфигурацию

У меня есть очень простой файл конфигурации Log4Net для использования с моей C # DLL. Ведение журнала работает нормально, если я создаю исполняемый файл вместо DLL для тестирования в автономном режиме, и в прошлом он также отлично работал с exe. Но когда я переключаюсь в режим DLL (библиотека классов) для работы с другим приложением, DLL просто не регистрируется. Вместо этого, когда он загружает файл конфигурации (XmlConfigurator.Configure (file)), я вижу ошибку - «вы пытались установить нулевой уровень для root»

Файл конфигурации

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
<log4net>
<root>
  <level value="Full" />
  <appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
  <file value="log/eft.log" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="3" />
  <maximumFileSize value="2MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="[%d] %-5p (%logger{1}:%line) - %m%n" />
  </layout>
</appender>
</log4net>
</configuration>

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

Использование кода вместо файла конфигурации -

       Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
       hierarchy.Root.RemoveAllAppenders(); 
       hierarchy.Root.Level = log4net.Core.Level.All;
       hierarchy.Configured = true;

       FileAppender fileAppender = new FileAppender();
       fileAppender.AppendToFile = true;
       fileAppender.LockingModel = new FileAppender.MinimalLock();
       fileAppender.File = "log.txt";
       PatternLayout pl = new PatternLayout();
       pl.ConversionPattern = "%d [%2%t] %-5p [%-10c]   %m%n%n";
       pl.ActivateOptions();
       fileAppender.Layout = pl;
       fileAppender.ActivateOptions();
       log4net.Config.BasicConfigurator.Configure(fileAppender);

В чем может быть проблема?


person highflyer    schedule 11.02.2015    source источник
comment
В каком процессе размещается ваша dll? Конфигурация log4net должна быть в файле конфигурации для этого процесса.   -  person Polyfun    schedule 11.02.2015
comment
Существует стороннее приложение, которое обращается к DLL, написанной на C ++, которая, в свою очередь, вызывает мою DLL, написанную на C #. Я написал только один на C # и не могу трогать два других.   -  person highflyer    schedule 11.02.2015
comment
вы пытались установить нулевой уровень для корневого - <level value="Full" /> - нет уровня с именем Full. Вместо этого используйте All.   -  person stuartd    schedule 11.02.2015
comment
Странно, Full работал при использовании с исполняемым файлом. Но да, вы правы, это должно быть все. Переключил его на Все, и этот нулевой уровень на root исчез. Но я по-прежнему ничего не вижу в журнале, как и ошибок, связанных с Log4net.   -  person highflyer    schedule 11.02.2015


Ответы (1)


Предполагая, что стороннее приложение называется ThirdPartyApp.exe и в нем размещается ваша dll, вам необходимо создать файл ThirdPartyApp.exe.config, содержащий опубликованную вами конфигурацию log4net.

person Polyfun    schedule 11.02.2015
comment
Не сработало. Все та же ошибка. После выполнения настройки я попробовал это - bool val = log4net.LogManager.GetRepository().Configured;, и он вернул истину. Не уверен, почему не устанавливается корневой уровень. Даже установка корневого уровня вручную не совсем помогает создать файл журнала - ((log4net.Repository.Hierarchy.Logger)logger.Logger).Level = log4net.Core.Level.All; - person highflyer; 11.02.2015