Подтвердить что ты не робот

Log4net не будет читать из app.config

У меня есть два проекта, настроенных одинаково для log4net. Один проект регистрируется в порядке; однако другой не регистрируется вообще.

Logger в проекте, который не регистрирует, возвращает IsFatalEnabled = false, IsErrorEnabled = false, IsWarnEnabled = false, IsInforEnabled = false и IsDebugEnabled = false.

Я скопировал и вставил один проект в другой, полностью заменил файл и попытался удалить все пробелы.

Что может привести к тому, что один проект не будет правильно читать правильные уровни из app.config?

app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="logfile.txt" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date: %-5level – %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="FileAppender" />
    </root>
  </log4net>
</configuration>

Program.cs

using log4net;

class Program
{
    private static readonly ILog Log = LogManager.GetLogger("SO");

    static void Main(string[] args)
    {
        Log.Info("SO starting");
    }
}
4b9b3361

Ответ 1

Кажется, что файл app.config не был настроен для просмотра log4net.

Я добавил следующую строку в AssemblyInfo.cs, и теперь включено ведение журнала:

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

Странно, так как я не добавлял эту строку в проект, который работал.

EDIT:

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

// This will cause log4net to look for a configuration file 
// called [ThisApp].exe.config in the application base 
// directory (i.e. the directory containing [ThisApp].exe) 
// The config file will be watched for changes. 
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

Ответ 2

Решением для меня было использование XmlConfigurator.Configure() в коде запуска программы. Однако моя ситуация отличалась тем, что я использовал модуль Autofac.log4net для регистрации ILog в контейнере Autofac. В этом случае использование XmlConfiguratorAttributeWatch установленным в true или false) оставило регистратор ненастроенным.