Конфигурация Log4net с указанной библиотекой

Приносим извинения за еще один вопрос по настройке log4net. У меня есть указанная библиотека, в которой есть этот метод:

public static ILog Logger = LogManager.GetLogger(typeof(MyClass));
public void InitializeLog()
{
    XmlConfigurator.Configure(new FileInfo("log4net.xml"));
    Logger.Info("Starting");
}

В проекте, который использует эту DLL, у меня есть файл log4net.xml на корневом уровне проекта. Выглядит это так:

<log4net>
  <logger name="NHibernate">
    <level value="DEBUG" />
  </logger>
  <logger name="NHibernate.SQL">
    <level value="DEBUG" />
  </logger>
  <appender name="Console" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %level - %message%newline%newline" />
    </layout>
  </appender>

  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="C:\log\project.log" />
    <appendToFile value="true" />
    <maximumFileSize value="10000KB" />
    <maxSizeRollBackups value="5" />
    <layout type="log4net.Layout.PatternLayout">
      <footer value ="&#13;&#10;"/>
      <conversionPattern value="%date %level - %message%newline%newline" />
    </layout>
  </appender>

  <root>
    <level value="DEBUG" />
    <appender-ref ref="RollingFile" />
    <appender-ref ref="Console" />
  </root>
</log4net>

Проект вызывает InitializeLog(), прежде чем что-либо пытается зарегистрировать. Однако он даже не будет записывать сообщение «Запуск» в начале. Когда я отлаживаю метод, в объекте Logger я вижу Configured = false. У меня есть ощущение, что это как-то связано с путем к XML-файлу, потому что он отлично работает в проекте, который использует эту библиотеку в качестве ссылки на проект вместо внешней (здесь не вариант). Мысли о том, почему конфигурация не работает. .?


person allie    schedule 16.03.2016    source источник
comment
Помечен ли файл log4net.xml как «Копировать в выходной каталог»? (Вы можете проверить свойство FileInfo Exists, чтобы увидеть, подбирает ли оно его)   -  person stuartd    schedule 16.03.2016
comment
@stuartd, да, он всегда копирует   -  person allie    schedule 16.03.2016
comment
Может быть что угодно. Используйте связанный вопрос, чтобы найти свою ошибку.   -  person jgauffin    schedule 16.03.2016


Ответы (1)


Конфигурация поиска log4net в текущей папке. Вам необходимо указать полный путь к файлу конфигурации:

Приложение ASP.NET

    protected void Application_Start()
    {
        ...
        string l4net = Server.MapPath("~/log4net.config");
        log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(l4net));
    }

WinForm или консольное приложение:

  1. В обозревателе решений щелкните правой кнопкой мыши файл log4net.config, выберите «Свойства» и установите для параметра «Копировать в выходной каталог» - «Копировать, если новее».
  2. Используйте полный путь к выходному каталогу (вы можете вызвать свой exe из другой папки)

    static void Main(string[] args)
    {
        var appPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
        log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(appPath));
    }
    

Содержимое моего log4net.config:

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="osai.log" />
      <appendToFile value="true" />
      <encoding value="utf-8" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <maximumFileSize value="50MB" />
      <immediateFlush value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="Header" value="--- Application start ---&#xD;&#xA;" />
        <param name="Footer" value="--- Application stop ---&#xD;&#xA;" />
        <conversionPattern value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
</configuration>
person Alexey Obukhov    schedule 16.03.2016
comment
Какое полное пространство имен для сервера? VS предлагает мне несколько вариантов на выбор. - person allie; 16.03.2016
comment
Это пространство имен Asp.Net System.Web. См. Обновление ответов для WinForm или консольного приложения. - person Alexey Obukhov; 16.03.2016
comment
не повезло ни одному из них. - person allie; 16.03.2016
comment
чем ваша конфигурация недействительна. добавь мой конфиг в ответ. - person Alexey Obukhov; 16.03.2016