log4net не будет читать из app.config - PullRequest
24 голосов
/ 25 августа 2010

У меня два проекта, настроенных одинаково для 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");
    }
}

Ответы [ 2 ]

42 голосов
/ 25 августа 2010

Похоже, что файл app.config не был настроен для наблюдения log4net.

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

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

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

РЕДАКТИРОВАТЬ:

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

// 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)]
0 голосов
/ 11 июля 2019

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

...