Настройка log4net без кода в Rider для проекта dotnet 2.1

Я работаю над домашним проектом .netcore2.1, используя Rider IDE. В настоящее время я пытаюсь добавить поддержку log4net для проекта и пытаюсь сделать это «правильным образом» (отдельный файл конфигурации, автоматическая настройка log4net без необходимости писать код для инициализации и т. д.). На данный момент все руководства (ex1, ex2) Я нашел предложение настроить его, добавив свойство сборки

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

в файл AssemblyInfo.cs. Однако мне, похоже, не удается найти файл, и он выглядит из других вопросов (например, this), что его можно вообще не использовать с .netcore в пользу выполнения настройки с помощью других средств (например, файла .csproj).

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

Есть ли способ сделать это более статическим способом (например, используя некоторую группу элементов в .csproj)?

Upd: для справки в будущем - это всего лишь пользовательский случай https://docs.microsoft.com/en-us/dotnet/standard/assembly/set-attributes , поэтому он просто переходит непосредственно в файл .cs.


person Dmitriy Korolevich    schedule 18.05.2020    source источник


Ответы (1)


Простой пример использования log4net для ядра .net в консоли:

[assembly: XmlConfigurator(Watch = true)]
namespace ConsoleApp
{
    class Program
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(Program));

        static void Main(string[] args)
        {
            var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
            XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
            log.Info("Entering application.");
            log.Error("Error application.");
        }
    }
}

Вам нужно добавить файл с настройками log4net в ваш проект: log4net.config, и не забудьте изменить его параметры "Копировать в выходной каталог" на "Копировать, если новее" или "Копировать всегда"

Пример log4net.config:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
    </layout>
  </appender>
  <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <file value="logs/" />
    <datePattern value="yyyy-MM-dd'.log'" />
    <staticLogFileName value="false" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <layout type="log4net.Layout.PatternLayout">
      <IgnoresException value="False" />
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="INFO"/>
    </filter>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="FileAppender" />
    <appender-ref ref="ConsoleAppender" />
  </root>
</log4net>

Кстати: log4net не поддерживает 1 апреля 2020 года: http://logging.apache.org/log4net/

person Dmitry    schedule 18.05.2020
comment
Спасибо, что указали, что он бездействует; Я ищу альтернативы (например, NLog). Кроме того, спасибо за указание [assembly: ...] является аннотацией и идет непосредственно к файлам .cs. - person Dmitriy Korolevich; 20.05.2020