.net core 2.1 log4net с несколькими средами - PullRequest
0 голосов
/ 28 января 2019

Я работаю над приложением .net core 2.1 и пытаюсь использовать log4net для записи журналов в файлы.Я могу заставить его работать, но не могу понять, как писать в разные среды (например, тестирование / производство), где журналы будут в разных местах.

log4net.config

<log4net>
    <root>
        <appender-ref ref="console" />
    <appender-ref ref="file" />
  </root>
  <appender name="console" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %level - %message%newline" />
    </layout>
    <threshold value="Info" />
  </appender>
  <appender name="file" type="log4net.Appender.RollingFileAppender">
    <file value="C:\logs\TestLocation\MyLog.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="5" />
    <maximumFileSize value="100MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %level - %message%newline" />
    </layout>
    <threshold value="Info" />
  </appender>
</log4net>

мой метод настройки startup.cs:

loggerFactory.AddLog4Net();

Я ввожу регистратор в мой контроллер:

 public MyController(ILogger<MyController> logger)
 {
     _logger = logger;
 }

и использую его в своем контроллере:

_logger.LogInformation("My logger worked!!!!!!!!!!!");

Все это прекрасно работает.Я надеялся, что смогу просто добавить новый файл log4net.config и просто назвать его log4net.Production.config, и приложение будет использовать другой конфигурационный файл в зависимости от среды, в которой он находится, например appnsettings.json.Вместо этого он просто использует мой файл log4net.config по умолчанию.

Можно ли иметь несколько файлов log4net.config для каждой среды, например appsettings.json?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

У вас есть возможность использовать расширенную пользовательскую конфигурацию из ваших настроек приложений. {Environment} .json.

Переопределив значение свойства Log4NetConfigFileName, вы сможетеукажите разные файлы log4net.config для каждой среды.

"Log4NetCore": {
    "Log4NetConfigFileName": "log4net.production.config"
}

Чтобы установить эту пользовательскую конфигурацию, вы должны заменить вызов AddLog4Net() эквивалентным вызовом метода AddLog4Net(Log4NetProviderOptions).

var loggingOptions = this.Configuration.GetSection("Log4NetCore")
                                       .Get<Log4NetProviderOptions>();
loggerFactory.AddLog4Net(loggingOptions);

Поскольку динамическая загрузка appsettings.json по среде уже настроена для вашего проекта, конкретная конфигурация для вашей производственной среды должна приниматься автоматически.

Надеюсь, это поможет.

0 голосов
/ 29 января 2019

На вашем Startup.cs вы можете настроить его следующим образом:

public Startup(IConfiguration configuration, IHostingEnvironment env)
{
    FileInfo fInfo;

    if (File.Exists(Path.Combine(env.ContentRootPath, $"log4net.{env.EnvironmentName}.xml")))
        fInfo = env.GetLog4NetFile($"log4net.{env.EnvironmentName}.xml");
    else
        fInfo = env.GetLog4NetFile($"log4net.xml");

    XmlConfigurator.Configure(fInfo);
    LogManager.GetLogger(DefaultLoggerName)?.Info($"Environment={env.EnvironmentName}"); 
    Configuration = configuration;
}

Затем вы можете создать файл типа log4net.Production.xml и настроить его в соответствии с используемой средой.

...